private static IQueryable <Tournament> GetOrderByQuery(IQueryable <Tournament> tournamentQuery, GetTournamentNavigationPaginatedQuery paginationQuery) { if (paginationQuery.NameOrder == OrderEnum.Asc) { return(tournamentQuery.OrderBy(t => t.Name)); } return(tournamentQuery.OrderByDescending(t => t.Name)); }
public async Task <IActionResult> GetTournaments([FromQuery] GetTournamentNavigationPaginatedQuery query) { var tournaments = await Mediator.Send(query); var tournamentsWithLinks = tournaments.Select(tournament => new HateoasResponse <TournamentNavigation>(tournament, GetLinksForTournament(tournament.Id))); return(Ok(HateoasResponseBuilder.FromPagedList( Url, tournaments.ToPagedListResume(), tournamentsWithLinks.ToList(), nameof(GetTournaments)) )); }
private static Expression <Func <Tournament, bool> > ToPredicate(GetTournamentNavigationPaginatedQuery query) { return(tournament => !tournament.IsDeleted && (query.TeamId == null || tournament.Participations.Any(p => !p.Deactivated && p.Team.Id == query.TeamId && !p.Team.IsDeleted && !p.Step.IsDeleted)) && (query.IsPublishedFilter == null || tournament.IsPublished == query.IsPublishedFilter) && (query.ParticipantIdFilter == null || tournament.Participations.Any(p => !p.Deactivated && !p.Team.IsDeleted && p.Team.UserTeams.Any(uT => uT.LeaveDate == null && !uT.User.IsDeleted && uT.User.Id == query.ParticipantIdFilter))) && (query.LanguageIdFilter == null || tournament.TournamentSteps.Any(tS => !tS.Step.IsDeleted && tS.Step.ProgrammingLanguage.Id == query.LanguageIdFilter)) && (query.NameFilter == null || tournament.Name.Contains(query.NameFilter))); }
public async Task <IPagedList <TournamentNavigation> > GetAllTournamentNavigationPaginated( GetTournamentNavigationPaginatedQuery paginationQuery) { var query = GetTournamentIncludeQueryable() .ThenInclude(s => s.ProgrammingLanguage) .Include(t => t.Participations) .ThenInclude <Tournament, Participation, Team>(p => p.Team) .ThenInclude(t => t.UserTeams) .ThenInclude <Tournament, UserTeam, User>(uT => uT.User) .Where(ToPredicate(paginationQuery)); query = GetOrderByQuery(query, paginationQuery); return(await query .Select(t => ToTournamentNavigation(t)) .FromPaginationQueryAsync(paginationQuery)); }