コード例 #1
0
        public List <ArtistDTO> GetArtists(ArtistsPageFilter filter)
        {
            //var filterArtists = Builders<Artist>.Filter.ElemMatch(x => x.Name, Builders<Album>.Filter.AnyIn(x => x.SongsIds, songsIds));
            //var filterArtists = Builders<Artist>.Filter.Regex(x => x.Name,".*"+ filter.SearchText+ ".*");

            var filterArtists = Builders <Artist> .Filter.Regex(x => x.Name, new BsonRegularExpression($".*{filter.SearchText}.*"));


            var userLibSongIds = libraryDbList.Find(l => l.Id == filter.LibraryId).FirstOrDefault().SongsIds;

            var artists = artistsDbList.Find(filterArtists).Skip(filter.PageIndex * filter.PageSize)
                          .Limit(filter.PageSize).ToList();

            var allSongsIds = artists.SelectMany(a => a.Albums.SelectMany(aa => aa.SongsIds));


            var songsFilter = Builders <Song> .Filter.In(x => x.Id, allSongsIds);

            var songs = songsDbList.Find(songsFilter).ToList();

            var artistsDTOs = new List <ArtistDTO>();

            foreach (var artist in artists)
            {
                var artistDTO = new ArtistDTO();

                artistDTO.Id         = artistDTO.Id;
                artistDTO.Name       = artist.Name;
                artistDTO.UrlPicture = artist.UrlPicture;
                artistDTO.Albums     = new List <AlbumDTO>();

                foreach (var album in artist.Albums)
                {
                    var albumDTO = new AlbumDTO();
                    albumDTO.Id         = album.Id;
                    albumDTO.Name       = album.Name;
                    albumDTO.UrlPicture = album.UrlPicture;
                    albumDTO.Songs      = new List <SongSimpleDTO>();

                    foreach (var songId in album.SongsIds)
                    {
                        var song    = songs.FirstOrDefault(s => s.Id == songId);
                        var songDTO = new SongSimpleDTO()
                        {
                            Id          = song.Id,
                            Name        = song.Name,
                            Url         = song.Url,
                            IsInLibrary = userLibSongIds.Contains(song.Id)
                        };
                        albumDTO.Songs.Add(songDTO);
                    }
                    artistDTO.Albums.Add(albumDTO);
                }
                artistsDTOs.Add(artistDTO);
            }
            return(artistsDTOs);
        }
コード例 #2
0
        public static SongSimpleMessage ToSimpleMessage(SongSimpleDTO song)
        {
            if (song == null)
            {
                return(null);
            }

            return(new SongSimpleMessage()
            {
                Id = song.Id.ToString(),
                Name = song.Name,
                Url = song.Url,
                IsInLibrary = song.IsInLibrary,
            });
        }