public ArtistRelationsForApi GetRelations(Artist artist, ArtistRelationsFields fields) { var contract = new ArtistRelationsForApi(); if (fields.HasFlag(ArtistRelationsFields.LatestAlbums)) { contract.LatestAlbums = GetLatestAlbums(ctx, artist); } if (fields.HasFlag(ArtistRelationsFields.PopularAlbums)) { var latestAlbumIds = contract.LatestAlbums != null?contract.LatestAlbums.Select(a => a.Id).ToArray() : new int[0]; contract.PopularAlbums = GetTopAlbums(ctx, artist, latestAlbumIds); } if (fields.HasFlag(ArtistRelationsFields.LatestSongs)) { contract.LatestSongs = GetLatestSongs(ctx, artist); } if (fields.HasFlag(ArtistRelationsFields.PopularSongs)) { contract.PopularSongs = GetTopSongs(ctx, artist, contract.LatestSongs); } return(contract); }
public ArtistRelationsForApi GetRelations(Artist artist, ArtistRelationsFields fields) { var contract = new ArtistRelationsForApi(); if (fields.HasFlag(ArtistRelationsFields.LatestAlbums)) { contract.LatestAlbums = GetLatestAlbums(ctx, artist); } if (fields.HasFlag(ArtistRelationsFields.PopularAlbums)) { var latestAlbumIds = contract.LatestAlbums != null?contract.LatestAlbums.Select(a => a.Id).ToArray() : new int[0]; contract.PopularAlbums = GetTopAlbums(ctx, artist, latestAlbumIds); } var songFields = SongOptionalFields.AdditionalNames | SongOptionalFields.ThumbUrl; if (fields.HasFlag(ArtistRelationsFields.LatestSongs)) { contract.LatestSongs = ctx.OfType <ArtistForSong>().Query() .Where(s => !s.Song.Deleted && s.Artist.Id == artist.Id && !s.IsSupport) .WhereIsMainSong(artist.ArtistType) .Select(s => s.Song) .OrderByPublishDate(SortDirection.Descending) .Take(8).ToArray() .Select(s => new SongForApiContract(s, languagePreference, songFields)) .ToArray(); } if (fields.HasFlag(ArtistRelationsFields.PopularSongs)) { var latestSongIds = contract.LatestSongs != null?contract.LatestSongs.Select(s => s.Id).ToArray() : new int[0]; contract.PopularSongs = ctx.OfType <ArtistForSong>().Query() .Where(s => !s.Song.Deleted && s.Artist.Id == artist.Id && !s.IsSupport && s.Song.RatingScore > 0 && !latestSongIds.Contains(s.Song.Id)) .Select(s => s.Song) .OrderByDescending(s => s.RatingScore) .Take(8).ToArray() .Select(s => new SongForApiContract(s, languagePreference, songFields)) .ToArray(); } return(contract); }