public async Task <IActionResult> GetTemplates(DateTimeOffset?dateBefore = null, string nameContains = null, string descriptionContains = null, int limit = 100, int skip = 0) { var getTemplatesFilter = new GetTemplatesFilter() { NameContains = nameContains, DescriptionContains = descriptionContains, DateBefore = dateBefore, Limit = Math.Clamp(limit, 0, 1000), Skip = Math.Max(0, skip) }; var getTemplatesResult = await _templateService.GetTemplates(getTemplatesFilter); switch (getTemplatesResult) { case BadRequestTypedResult <IEnumerable <TemplateEntity> > badRequestTypedResult: ModelState.AddModelError(badRequestTypedResult.Key, badRequestTypedResult.ErrorMessage); return(ValidationProblem(ModelState)); case FailedTypedResult <IEnumerable <TemplateEntity> > failedTypedResult: return(Problem(failedTypedResult.Error.ToString(), statusCode: StatusCodes.Status500InternalServerError, title: failedTypedResult.Error.Message)); case NotFoundTypedResult <IEnumerable <TemplateEntity> > _: return(NotFound()); case SuccessfulTypedResult <IEnumerable <TemplateEntity> > successfulTypedResult: return(Ok(new FilteredDtoOut <GetTemplatesFilter, TemplateOutDto>(getTemplatesFilter, Mapper.Map <IEnumerable <TemplateEntity>, IEnumerable <TemplateOutDto> >(successfulTypedResult.Value)))); default: { var argException = new ArgumentOutOfRangeException(nameof(getTemplatesResult)); return(Problem(argException.ToString(), statusCode: StatusCodes.Status500InternalServerError, title: argException.Message)); } } }
public async Task <TypedResult <IEnumerable <TemplateEntity> > > GetTemplates(GetTemplatesFilter getTemplatesFilter) { if (getTemplatesFilter == null) { return(new FailedTypedResult <IEnumerable <TemplateEntity> >(new ArgumentNullException(nameof(getTemplatesFilter)))); } var filters = new List <FilterDefinition <TemplateEntity> >(); if (!string.IsNullOrWhiteSpace(getTemplatesFilter.NameContains)) { filters.Add(Builders <TemplateEntity> .Filter.Regex(te => te.Name, getTemplatesFilter.NameContains)); } if (!string.IsNullOrWhiteSpace(getTemplatesFilter.DescriptionContains)) { filters.Add(Builders <TemplateEntity> .Filter.Regex(te => te.Description, getTemplatesFilter.DescriptionContains)); } if (getTemplatesFilter.DateBefore.HasValue) { filters.Add(Builders <TemplateEntity> .Filter.Lte(te => te.CreatedDate, getTemplatesFilter.DateBefore)); } var opts = new FindOptions <TemplateEntity>() { Limit = getTemplatesFilter.Limit, Skip = getTemplatesFilter?.Skip, Sort = Builders <TemplateEntity> .Sort.Descending(me => me.CreatedDate) }; if (filters.Any()) { var foundTemplates = (await _templateCollection.FindAsync(Builders <TemplateEntity> .Filter.And(filters), opts)).ToList(); return(new SuccessfulTypedResult <IEnumerable <TemplateEntity> >(foundTemplates)); } else { var foundTemplates = (await _templateCollection.FindAsync(Builders <TemplateEntity> .Filter.Empty, opts)).ToList(); return(new SuccessfulTypedResult <IEnumerable <TemplateEntity> >(foundTemplates)); } }