public async Task <IActionResult> SearchAsync([FromBody] PageDescriptorModel page, CancellationToken cancellationToken = default) { var request = new GetAllModelsFromEntityByPageQuery <ToDoListModel, ToDoList, int, EntityDbContext>(page); var result = await mediator.HandleAsync(request, cancellationToken); return(this.PagedJsonResult(result, page.Envelope ?? false)); }
protected void BindEnvelope(IValueProvider valueProvider, PageDescriptorModel model) { var envelopeResult = valueProvider.GetValue(EnvelopeKey); var value = envelopeResult.FirstValue; if (!string.IsNullOrEmpty(value)) { if (bool.TryParse(value, out var envelope)) { model.Envelope = envelope; } } }
protected void BindTake(IValueProvider valueProvider, PageDescriptorModel model) { var limitResult = valueProvider.GetValue(TakeKey); var value = limitResult.FirstValue; if (!string.IsNullOrEmpty(value)) { if (int.TryParse(value, out var take)) { model.Take = take; } } }
protected void BindSkip(IValueProvider valueProvider, PageDescriptorModel model) { var offsetResult = valueProvider.GetValue(SkipKey); var value = offsetResult.FirstValue; if (!string.IsNullOrEmpty(value)) { if (int.TryParse(value, out var skip)) { model.Skip = skip; } } }
public virtual Task BindModelAsync(ModelBindingContext bindingContext) { var model = new PageDescriptorModel(); bindingContext.Model = model; this.BindSkip(bindingContext.ValueProvider, model); this.BindTake(bindingContext.ValueProvider, model); this.BindEnvelope(bindingContext.ValueProvider, model); this.BindFilters(bindingContext.ValueProvider, model); this.BindSort(bindingContext.ValueProvider, model); bindingContext.Result = ModelBindingResult.Success(model); return(Task.CompletedTask); }
protected void BindSort(IValueProvider valueProvider, PageDescriptorModel model) { var sortResult = valueProvider.GetValue(SortKey); var value = sortResult.FirstValue; if (!string.IsNullOrEmpty(value)) { var sortValues = value.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries); foreach (var sortValue in sortValues) { var sort = SortDescriptorFactory.Create(sortValue); if (sort != null) { model.Sorts.Add(sort); } } } }
protected void BindFilters(IValueProvider valueProvider, PageDescriptorModel model) { var filterResult = valueProvider.GetValue(FilterKey); var value = filterResult.FirstValue; if (!string.IsNullOrEmpty(value)) { var filterValues = value.Split(new[] { ";" }, StringSplitOptions.None); foreach (var filterValue in filterValues) { var filter = FilterDescriptorFactory.Create(filterValue); if (filter != null) { model.Filters.Add(filter); } } } }
public async Task SearchAsyncTest() { // Arrange var todolist = await this.WithEntityInTheDatabaseAsync(new Domain.Entities.ToDoList() { Name = "Before" }); var todoItem = await this.WithEntityInTheDatabaseAsync(new Domain.Entities.ToDoItem() { Name = "Before", ToDoListId = todolist.Id }); var page = new PageDescriptorModel() { Skip = 0, Take = 5, Envelope = true }; var request = this.Fixture .Server .CreateApiRequest <ToDoItemController>(c => c.SearchAsync(todolist.Id, page, default)) .WithIdentity(Identities.Basic); // Act var response = await request.SendAsync(HttpMethods.Post); // Assert Assert.True(response.IsSuccessStatusCode); var result = await response.Content.ReadFromJsonAsync <EnvelopedModel <ToDoItemModel> >(); Assert.NotNull(result); Assert.NotEmpty(result.Data); Assert.Single(result.Data); Assert.Equal(page.Skip, result.Skip); Assert.Equal(page.Take, result.Take); Assert.Equal(1, result.Total); }
public async Task <IActionResult> SearchAsync([FromBody] PageDescriptorModel page, CancellationToken cancellationToken = default) { var models = await this.toDoListService.SearchAsync(page, cancellationToken); return(this.PagedJsonResult(models, page.Envelope ?? false)); }