using Sony.Filtr.ApolloAPI.Models; using Sony.Filtr.SpotifyWebAPI.Model; using System; using System.Collections.Generic; using System.Linq; namespace Sony.Filtr.Playlists.Spotify.Model { public class SpotifyTrackAnalyzeData { public SpotifyTrackAnalyzeData() { this.Artists = new List(); } public string TrackId { get; set; } public string TrackName { get; set; } public string Isrc { get; set; } public int Popularity { get; set; } public DateTime AddedAt { get; set; } public int PlaylistIndex { get; set; } public SpotifyAlbumAnalyzeData Album { get; set; } public ICollection Artists { get; set; } } public class SpotifyArtistAnalyzeData { public string Name { get; set; } public string Id { get; set; } public string GetArtistUri() { return $"spotify:artist:{this.Id}"; } } public class SpotifyAlbumAnalyzeData { public string Upc { get; set; } public string ImageFileName { get; set; } public string Id { get; set; } } public static class PlaylistTrackItemExtensions { public static SpotifyTrackAnalyzeData ToDbDataFormat(this PlaylistTrackItem track, int position) { var result = new SpotifyTrackAnalyzeData { TrackName = track.track.name, TrackId = track.track.id, Popularity = track.track.popularity, Isrc = track.track?.external_ids?.isrc, AddedAt = track.added_at.HasValue ? track.added_at.Value : DateTime.MinValue, Album = new SpotifyAlbumAnalyzeData { Id = track.track?.album?.id, ImageFileName = track.track.album.images?.OrderBy(i => i.height).FirstOrDefault()?.url }, Artists = track.track.artists.Select(a => new SpotifyArtistAnalyzeData() { Name = a.name, Id = a.id }).ToList(), PlaylistIndex = position }; return result; } public static SpotifyTrackAnalyzeData ToDbDataFormat(this SpotifyPlaylistTrackItem track, int position) { var result = new SpotifyTrackAnalyzeData { TrackName = track.track.name, TrackId = track.track.id, Popularity = track.track.popularity, Isrc = track.track?.external_ids?.isrc, AddedAt = track.added_at.HasValue ? track.added_at.Value : DateTime.MinValue, Album = new SpotifyAlbumAnalyzeData { Id = track.track?.album?.id, ImageFileName = track.track.album.images?.OrderBy(i => i.height).FirstOrDefault()?.url }, Artists = track.track.artists.Select(a => new SpotifyArtistAnalyzeData() { Name = a.name, Id = a.id }).ToList(), PlaylistIndex = position }; return result; } } }