public async Task <IActionResult> GetTemplateRevisions([FromRoute, ObjectIdValidation] string templateId, int limit = 100, int skip = 0, DateTimeOffset?dateBefore = null) { var getTemplateRevisionsFilter = new GetTemplateRevisionsFilter() { Limit = Math.Clamp(limit, 0, 1000), Skip = Math.Max(0, skip), DateBefore = dateBefore }; var getTemplateRevisionResult = await _templateService.GetFilteredTemplateRevisions(ObjectId.Parse(templateId), getTemplateRevisionsFilter); switch (getTemplateRevisionResult) { case BadRequestTypedResult <IEnumerable <TemplateRevisionEntity> > badRequestTypedResult: ModelState.AddModelError(badRequestTypedResult.Key, badRequestTypedResult.ErrorMessage); return(ValidationProblem(ModelState)); case FailedTypedResult <IEnumerable <TemplateRevisionEntity> > failedTypedResult: return(Problem(failedTypedResult.Error.ToString(), statusCode: StatusCodes.Status500InternalServerError, title: failedTypedResult.Error.Message)); case NotFoundTypedResult <IEnumerable <TemplateRevisionEntity> > _: return(NotFound()); case SuccessfulTypedResult <IEnumerable <TemplateRevisionEntity> > successfulTypedResult: return(Ok(new FilteredDtoOut <GetTemplateRevisionsFilter, TemplateRevisionOutDto>(getTemplateRevisionsFilter, Mapper.Map <IEnumerable <TemplateRevisionEntity>, IEnumerable <TemplateRevisionOutDto> >(successfulTypedResult.Value)))); default: { var argException = new ArgumentOutOfRangeException(nameof(getTemplateRevisionResult)); return(Problem(argException.ToString(), statusCode: StatusCodes.Status500InternalServerError, title: argException.Message)); } } }
public async Task <TypedResult <IEnumerable <TemplateRevisionEntity> > > GetFilteredTemplateRevisions(ObjectId templateId, GetTemplateRevisionsFilter getTemplateRevisionsFilter) { try { if (getTemplateRevisionsFilter == null) { return(new BadRequestTypedResult <IEnumerable <TemplateRevisionEntity> >("TemplateRevisionsFilter", "TemplateRevisionsFilter must not be null.")); } var filters = new List <FilterDefinition <TemplateRevisionEntity> >(); if (getTemplateRevisionsFilter.DateBefore.HasValue) { filters.Add(Builders <TemplateRevisionEntity> .Filter.Lte(te => te.CreatedDate, getTemplateRevisionsFilter.DateBefore)); } var opts = new FindOptions <TemplateRevisionEntity>() { Limit = getTemplateRevisionsFilter.Limit, Skip = getTemplateRevisionsFilter.Skip, Sort = Builders <TemplateRevisionEntity> .Sort.Descending(me => me.CreatedDate) }; if (filters.Any()) { var foundTemplates = (await _templateRevisionCollection.FindAsync(Builders <TemplateRevisionEntity> .Filter.And(filters), opts)).ToList(); return(new SuccessfulTypedResult <IEnumerable <TemplateRevisionEntity> >(foundTemplates)); } else { var foundTemplates = (await _templateRevisionCollection.FindAsync(Builders <TemplateRevisionEntity> .Filter.Empty, opts)).ToList(); return(new SuccessfulTypedResult <IEnumerable <TemplateRevisionEntity> >(foundTemplates)); } } catch (Exception e) { return(new FailedTypedResult <IEnumerable <TemplateRevisionEntity> >(e)); } }