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));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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
            });
        }
Beispiel #5
0
        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);
 }