public async Task <PagedCollection <GetGameDto> > GetPagedListAsync(GameFilterParamsDto filterParams, CancellationToken ct = default) { Logger.LogInformation("Game games by filter params {FilterParams}", filterParams); GameFilterParams dbFilterParams = Mapper.Map <GameFilterParams>(filterParams); PagedCollection <GameBase> dbGames = await UnitOfWork.GameRepository.GetByFilterParamsAsync(dbFilterParams, ct); return(new PagedCollection <GetGameDto>(Mapper.Map <ICollection <GetGameDto> >(dbGames.Items).ToImmutableList(), dbGames.TotalCount)); }
public async Task <PagedCollection <Game> > GetByFilterParamsAsync(GameFilterParams filterParams, CancellationToken ct) { var query = DbSet.AsNoTracking(); SortGames(filterParams.SortingType, query); query = GetPagedQuery(query, filterParams, out int totalCount); var result = await query.ToListAsync(ct); return(new PagedCollection <Game>(result, totalCount)); }
public async Task <PagedCollection <GameBase> > GetByFilterParamsAsync(GameFilterParams filterParams, CancellationToken ct) { var query = GetGames(); FillGamesQueryFilterParams(filterParams); query = FillSortParams(query, filterParams); int totalCount = query.Count(); var games = await query .Skip(filterParams.PageSize *(filterParams.PageNumber - 1)) .Take(filterParams.PageSize) .AsNoTracking() .ToListAsync(ct); PagedCollection <GameBase> result = new PagedCollection <GameBase>(games.ToImmutableList(), totalCount); return(result); }
private static void FillGamesQueryFilterParams(GameFilterParams filterParams) { var predicate = PredicateBuilder.New <GameBase>(x => !x.IsDeleted); if (filterParams.GenreIds != null && filterParams.GenreIds.Any()) { predicate = predicate.Extend(p => filterParams.GenreIds.Contains(p.GenreId), PredicateOperator.And); } if (!string.IsNullOrEmpty(filterParams.Term)) { predicate = predicate.Extend( x => EF.Functions.Like(x.GameDetails.Name, $"%{filterParams.Term}%"), PredicateOperator.And); } if (filterParams.StartPrice.HasValue && filterParams.EndPrice.HasValue) { predicate = predicate.Extend( x => filterParams.StartPrice <= x.GameDetails.Price && filterParams.EndPrice >= x.GameDetails.Price, PredicateOperator.And); } filterParams.Expression = predicate; }
private static IQueryable <GameBase> FillSortParams(IQueryable <GameBase> query, GameFilterParams filterParams) { query = query.Where(filterParams.Expression); switch (filterParams.SortMode) { case GameSortMode.ByName: query = query.OrderBy(x => x.GameDetails.Name).AsQueryable(); break; case GameSortMode.ByCountOfSales: query = query.OrderByDescending(x => x.GameDetails.OrderCount).AsQueryable(); break; case GameSortMode.ByRating: query = query.OrderByDescending(x => x.GameDetails.AverageRating).AsQueryable(); break; case GameSortMode.ByPriceHighToLow: query = query.OrderByDescending(x => x.GameDetails.Price).AsQueryable(); break; case GameSortMode.ByPriceLowToHigh: query = query.OrderBy(x => x.GameDetails.Price).AsQueryable(); break; } return(query); }