using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using Sony.Filtr.Contracts.Entities; using Sony.Filtr.PlaylistGeneration; namespace Sony.Filtr.API.ViewModels.v2 { [DataContract] public class TrackViewModel { public static TrackViewModel BuildTrackViewModel(ExtendedTrackSuggestion trackSuggestion, IEnumerable tags, List> artistMood = null, string relatedTo = null) { var track = trackSuggestion.ExtendedTrack; string imageId = null; if (trackSuggestion.Artist != null) imageId = trackSuggestion.Artist.LastFMImageID; var viewModel = new TrackViewModel() { ArtistName = track.ArtistName, Title = track.Title, Danceability = track.Danceability, Energy = track.Energy, Loudness = track.Loudness, Mode = track.Mode, Tempo = track.Tempo, Hotness = track.Hotness, ArtistTags = tags.ToList(), ArtistFamiliarity = track.ArtistFamiliarity, ArtistHotness = track.ArtistHotnesss, SongType = track.SongType, Match = trackSuggestion.Score, ImageID = imageId, Duration = track.Duration, DeezerId = track.DeezerId, }; if (track.SpotifyLink != null) viewModel.SpotifyUri = track.SpotifyLink.Uri; if (artistMood != null) { viewModel.ArtistMoods = artistMood.Select(t => new TagViewModel() { ID = "tag-" + t.Item, Label = t.Item, Match = t.Weight, Type = "Mood" }).ToList(); } viewModel.RelatedTo = relatedTo; return viewModel; } [DataMember(Name = "artistName", Order = 1)] public string ArtistName { get; set; } [DataMember(Name = "title", Order = 2)] public string Title { get; set; } [DataMember(Name = "danceability", Order = 3)] public double? Danceability { get; set; } [DataMember(Name = "energy", Order = 4)] public double? Energy { get; set; } [DataMember(Name = "loudness", Order = 5)] public double? Loudness { get; set; } [DataMember(Name = "mode", Order = 6)] public int? Mode { get; set; } [DataMember(Name = "tempo", Order = 7)] public double? Tempo { get; set; } [DataMember(Name = "hotness", Order = 8)] public double? Hotness { get; set; } [DataMember(Name = "spotifyUri", Order = 9)] public string SpotifyUri { get; set; } [DataMember(Name = "tags", Order = 10)] public List ArtistTags { get; set; } [DataMember(Name = "artistFamiliarity", Order = 11)] public double? ArtistFamiliarity { get; set; } [DataMember(Name = "songType", Order = 12)] public List SongType { get; set; } [DataMember(Name = "artistHotness", Order = 13)] public double? ArtistHotness { get; set; } [DataMember(Name = "match", Order = 14)] public double Match { get; set; } [DataMember(Name = "mood", Order = 15, EmitDefaultValue = false)] public List ArtistMoods { get; set; } [DataMember(Name = "imageId", Order = 16)] public string ImageID { get; set; } [DataMember(Name = "duration", Order = 17, EmitDefaultValue = false)] public int Duration { get; set; } [DataMember(Name = "relatedTo", Order = 18, EmitDefaultValue = false)] public string RelatedTo { get; set; } [DataMember(Name = "deezerId", Order = 19, EmitDefaultValue = false)] public long? DeezerId { get; set; } } }