private static IQueryable <Step> GetOrderByQuery(IQueryable <Step> stepQuery,
                                                  GetPaginatedStepNavigationQuery paginationQuery)
 {
     if (paginationQuery.NameOrder == OrderEnum.Asc)
     {
         return(stepQuery.OrderBy(t => t.Name));
     }
     return(stepQuery.OrderByDescending(t => t.Name));
 }
 public static Expression <Func <Step, bool> > FromQuery(GetPaginatedStepNavigationQuery query)
 {
     return(step => !step.IsDeleted &&
            (query.NameFilter == null || step.Name.ToLowerInvariant()
             .Contains(query.NameFilter.ToLowerInvariant())) &&
            (query.LanguageIdFilter == null || !step.ProgrammingLanguage.IsDeleted &&
             step.ProgrammingLanguage.Id == query.LanguageIdFilter) &&
            (query.WithoutIdsFilter == null || query.WithoutIdsFilter.All(id => id != step.Id)));
 }
        public async Task <IActionResult> GetSteps([FromQuery] GetPaginatedStepNavigationQuery query)
        {
            var steps = await Mediator.Send(query);

            var stepsWithLinks = steps.Select(step =>
                                              new HateoasResponse <StepNavigation>(step, GetLinksForStep(step.Id)));

            return(Ok(HateoasResponseBuilder.FromPagedList(
                          Url,
                          steps.ToPagedListResume(),
                          stepsWithLinks.ToList(),
                          nameof(GetSteps))
                      ));
        }
        public async Task <IPagedList <StepNavigation> > GetAllStepNavigationPaginated(
            GetPaginatedStepNavigationQuery paginationQuery)
        {
            var query = GetStepIncludeQueryable()
                        .Where(FromQuery(paginationQuery));

            if (paginationQuery.IsPublishedFilter is not null)
            {
                query = query.Where(IsPublishedFromQuery(paginationQuery));
            }

            query = GetOrderByQuery(query, paginationQuery);
            return(await query.Select(s => ToStepNavigation(s))
                   .FromPaginationQueryAsync(paginationQuery));
        }
 public static Expression <Func <Step, bool> > IsPublishedFromQuery(GetPaginatedStepNavigationQuery query)
 {
     return(step => query.IsPublishedFilter == null || query.IsPublishedFilter.Value
         ? step.TournamentSteps.Any(tS => !tS.Tournament.IsDeleted && tS.Tournament.IsPublished)
         : !step.TournamentSteps.Any(tS => !tS.Tournament.IsDeleted && tS.Tournament.IsPublished));
 }