Beispiel #1
0
        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));
            }
            }
        }
Beispiel #2
0
        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));
            }
        }