public override Task <GetLibrarySongsResponse> GetLibrarySongs(GetLibrarySongsRequest request, ServerCallContext context) { var filter = new LibraryPageFilter() { UserId = Guid.Parse(request.UserId), Genre = (GenreEnum)request.Genre, Decade = (DecadeEnum)request.Decade, PageIndex = request.PageIndex, PageSize = request.PageSize }; if (request.PopularityRankingId != null && request.PopularityRankingId != "") { filter.PopularityRankingId = Guid.Parse(request.PopularityRankingId); } var(totalNumber, songs) = _libraryService.GetLibrarySongs(filter); var response = new GetLibrarySongsResponse() { TotalNumber = totalNumber }; response.Songs.AddRange(songs.Select(s => SongGrpcConverter.ToMessage(s)).ToList()); return(Task.FromResult(response)); }
public (int, List <SongDTO>) GetLibrarySongs(LibraryPageFilter filter) { //TODO OPTIMIZE QUERY PLEASEEEEE //TODO correct filter and check if data is correct var query = from user in _context.Users join lib in _context.Libraries on user.LibraryId equals lib.Id join libSong in _context.LibrarySong on lib.Id equals libSong.LibraryId join song in _context.Songs on libSong.SongId equals song.Id join album in _context.Albums on song.AlbumId equals album.Id join artist in _context.Artists on album.ArtistId equals artist.Id where user.Id == filter.UserId && (song.Genre == filter.Genre || filter.Genre == null) //&& ( IsYearInDecade(song.Year, filter.Decade)) && (song.PopularityRankingId == filter.PopularityRankingId || filter.PopularityRankingId == null) && (song.Genre == filter.Genre || filter.Genre == null) select new SongDTO { Id = song.Id, Name = song.Name, Year = song.Year, Album = AlbumCoreConverter.ToShortDTO(album), Artist = ArtistCoreConverter.ToShortDTO(artist), }; //int totalNumber = query.ToList().Count; int totalNumber = query.ToList().Where(song => IsYearInDecade(song.Year, filter.Decade)).ToList().Count; var songs = query.ToList().Where(song => IsYearInDecade(song.Year, filter.Decade)).Skip(filter.PageIndex * filter.PageSize).Take(filter.PageSize).ToList(); return(totalNumber, songs); }
public (int, List <SongDTO>) GetLibrarySongs(LibraryPageFilter filter) { var queryableUsers = usersDbList.AsQueryable(); var library = from lib in libraryDbList.AsQueryable() join u in queryableUsers on lib.Id equals u.LibraryId where u.Id == filter.UserId select lib.SongsIds; var allSongsIds = library.FirstOrDefault(); if (allSongsIds == null) { return(0, new List <SongDTO>()); } var query = from song in songsDbList.AsQueryable() where allSongsIds.Contains(song.Id) && (song.Genre == filter.Genre || filter.Genre == null || filter.Genre == 0) && (song.PopularityRankingId == filter.PopularityRankingId || filter.PopularityRankingId == null) select new SongDTO { Id = song.Id, Name = song.Name, Year = song.Year, Url = song.Url }; int totalNumber = query.ToList().Where(song => IsYearInDecade(song.Year, filter.Decade)).ToList().Count; var songsDTOList = query.ToList().Where(song => IsYearInDecade(song.Year, filter.Decade)).Skip(filter.PageIndex * filter.PageSize).Take(filter.PageSize).ToList(); var songsIds = songsDTOList.Select(l => l.Id).ToList(); var filterArtists = Builders <Artist> .Filter.ElemMatch(x => x.Albums, Builders <Album> .Filter.AnyIn(x => x.SongsIds, songsIds)); var artists = artistsDbList.Find(filterArtists).ToList(); foreach (var artist in artists) { foreach (var album in artist.Albums) { var songsDTO = songsDTOList.Where(s => album.SongsIds.Contains(s.Id)); if (songsDTO != null) { foreach (var songDTO in songsDTO) { songDTO.Artist = artist.Name; songDTO.Album = album.Name; songDTO.AlbumUrlPicture = album.UrlPicture; songDTO.Artist = artist.Name; songDTO.IsInLibrary = true; } } } } return(totalNumber, songsDTOList); }
public LibraryPageModel GetLibrarySongs([FromBody] LibraryPageFilter filter) { var(totaNumber, songs) = _libraryService.GetLibrarySongs(filter); return(new LibraryPageModel() { Songs = songs.Select(s => SongWebConverter.ToModel(s, true)).ToList(), TotalNumber = totaNumber }); }
public async Task <LibraryPageModel> GetLibrarySongsAsync(LibraryPageFilter filter) { var channel = new Channel(channelTarget, ChannelCredentials.Insecure); try { var client = new LibraryGrpcService.LibraryGrpcServiceClient(channel); var request = new GetLibrarySongsRequest() { UserId = filter.UserId.ToString(), PageIndex = filter.PageIndex, PageSize = filter.PageSize }; if (filter.Genre != null) { request.Genre = (int)filter.Genre; } if (filter.Decade != null) { request.Decade = (int)filter.Decade; } if (filter.PopularityRankingId != null) { request.PopularityRankingId = filter.PopularityRankingId.ToString(); } var response = await client.GetLibrarySongsAsync(request); return(new LibraryPageModel() { TotalNumber = response.TotalNumber, Songs = response.Songs.Select(s => SongGrpcConverter.ToMessage(s)).ToList() }); } finally { await channel.ShutdownAsync(); } }
public LibraryPageModel GetLibrarySongs([FromBody] LibraryPageFilter filter) { return(_libraryService.GetLibrarySongsAsync(filter).Result); }