private static IQueryable <Team> GetOrderByQuery(IQueryable <Team> teamQuery,
                                                  GetTeamNavigationPaginatedQuery paginationQuery)
 {
     if (paginationQuery.NameOrder == OrderEnum.Asc)
     {
         return(teamQuery.OrderBy(t => t.Name));
     }
     return(teamQuery.OrderByDescending(t => t.Name));
 }
 private static Expression <Func <Team, bool> > ToPredicate(GetTeamNavigationPaginatedQuery query)
 {
     return(team =>
            !team.IsDeleted &&
            (query.TournamentFilter == null || team.Participations.Any(p =>
                                                                       !p.Deactivated && !p.Tournament.IsDeleted && p.Tournament.IsPublished &&
                                                                       p.Tournament.Id == query.TournamentFilter)) &&
            (query.MemberIdFilter == null || team.UserTeams.Any(uT =>
                                                                uT.LeaveDate == null && !uT.User.IsDeleted && uT.User.Id == query.MemberIdFilter)) &&
            (query.NameFilter == null || team.Name.Contains(query.NameFilter)));
 }
        public async Task <IPagedList <TeamNavigation> > GetAllTeamNavigationPaginated(
            GetTeamNavigationPaginatedQuery paginationQuery)
        {
            var query = GetTeamIncludeQueryable()
                        .Where(ToPredicate(paginationQuery));

            if (paginationQuery.NameOrder != null)
            {
                query = GetOrderByQuery(query, paginationQuery);
            }

            return(await query.Select(t => ToTeamNavigation(t))
                   .FromPaginationQueryAsync(paginationQuery));
        }
        public async Task <IActionResult> GetTeams([FromQuery] GetTeamNavigationPaginatedQuery query)
        {
            var teams = await Mediator.Send(query);

            var teamsWithLinks = teams.Select(team =>
                                              new HateoasResponse <TeamNavigation>(team, GetLinksForTeam(team.Id)));

            return(Ok(HateoasResponseBuilder.FromPagedList(
                          Url,
                          teams.ToPagedListResume(),
                          teamsWithLinks.ToList(),
                          nameof(GetTeams))
                      ));
        }