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); }
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, }); }