Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }