[HttpHead] //Head请求不返回body,只返回head //[Authorize] public async Task <IActionResult> GetSaless([FromQuery] SalesQryDto salesQryDto) { this._logger.LogInformation("enter 'GetSaless' method."); if (!this._propertyMappingService.ValidMappingExistsFor <SalesDto, Sales>(salesQryDto.OrderFields)) //check if order field exist. { return(BadRequest()); } if (!this._propertyCheckerService.TypeHasProperties <SalesDto>(salesQryDto.ShapeFields)) { return(BadRequest()); } PagedList <Sales> saless = await this._salesDao.Query(salesQryDto); var previousPageLink = saless.HasPrevious ? CreateSalessResourceUri(salesQryDto, ResourceUriType.PreviousPage) : null; var nextPageLink = saless.HasNext ? CreateSalessResourceUri(salesQryDto, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = saless.TotalCount, pageSize = saless.PageSize, currentPage = saless.CurrentPage, totalPages = saless.TotalPages, }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata, new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping })); var salesDtos = this._mapper.Map <IEnumerable <SalesDto> >(saless); //404 NotFound //数据塑形 var shapedData = salesDtos.ShapData <SalesDto>(salesQryDto.ShapeFields); //添加Hateoas支持 var links = CreateLinksForSales(salesQryDto, saless.HasPrevious, saless.HasNext); var shapedSalessWithLinks = shapedData.Select(c => { var salesDict = c as IDictionary <string, object>; if (salesDict.ContainsKey("Id")) { var salesLinks = CreateLinksForSales((int)salesDict["Id"], null); salesDict.Add("links", salesLinks); } return(salesDict); }); var linkedCollectionResource = new { value = shapedSalessWithLinks, links }; return(Ok(linkedCollectionResource)); }
public async Task <PagedList <Sales> > Query(SalesQryDto queryObject) { IQueryable <Sales> sales = this._context.Sales; if (queryObject != null) { if (queryObject.BeginDateSoldQry != DateTime.MinValue) { sales = sales.Where(s => s.DateSold >= queryObject.BeginDateSoldQry); } if (queryObject.EndDateSoldQry != DateTime.MinValue) { sales = sales.Where(s => s.DateSold <= queryObject.EndDateSoldQry); } /* sales = sales.Where(s=>s.Customer.Id==(queryObject.CustomerId==0?s.Customer.Id : queryObject.CustomerId) * && s.Product.Id==(queryObject.ProductId==0?s.Product.Id:queryObject.ProductId) * && s.Store.Id==(queryObject.StoreId==0?s.Store.Id:queryObject.StoreId)) */ if (queryObject.CustomerId > 0) { sales = sales.Where(s => s.Customer.Id == queryObject.CustomerId); } if (queryObject.ProductId > 0) { sales = sales.Where(s => s.Product.Id == queryObject.ProductId); } if (queryObject.StoreId > 0) { sales = sales.Where(s => s.Store.Id == queryObject.StoreId); } sales = sales.Include(x => x.Customer) .Include(x => x.Product) .Include(x => x.Store); } else { sales = this._context.Sales; } var totalData = await sales.CountAsync(); var mappingDictionary = this._propertyMappingService.GetPropertyMapping <SalesDto, Sales>(); sales = sales.ApplySort(queryObject.OrderFields, mappingDictionary); var results = await sales.Skip(queryObject.Skip).Take(queryObject.PageSize).ToListAsync(); PagedList <Sales> queryList = new PagedList <Sales>(results, totalData, queryObject.PageNumber, queryObject.PageSize); return(queryList); }
private IEnumerable <LinkDto> CreateLinksForSales(SalesQryDto parameters, bool hasPrevious, bool hasNext) { var links = new List <LinkDto>(); links.Add(new LinkDto(CreateSalessResourceUri(parameters, ResourceUriType.CurrentPage), "self", "GET")); if (hasPrevious) { links.Add(new LinkDto(CreateSalessResourceUri(parameters, ResourceUriType.PreviousPage), "get_previous_page", "GET")); } if (hasNext) { links.Add(new LinkDto(CreateSalessResourceUri(parameters, ResourceUriType.NextPage), "get_next_page", "GET")); } return(links); }
/// <summary> /// 创建翻页的url /// </summary> /// <param name="parameters"></param> /// <param name="type"></param> /// <returns></returns> private string CreateSalessResourceUri(SalesQryDto parameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link(nameof(GetSaless), new { fields = parameters.ShapeFields, pageNumber = parameters.PageNumber - 1, pageSize = parameters.PageSize, beginDateSoldQry = parameters.BeginDateSoldQry, endDateSoldQry = parameters.EndDateSoldQry, customerId = parameters.CustomerId, productId = parameters.ProductId, storeId = parameters.StoreId, orderBy = parameters.OrderFields })); case ResourceUriType.NextPage: return(Url.Link(nameof(GetSaless), new { fields = parameters.ShapeFields, pageNumber = parameters.PageNumber + 1, pageSize = parameters.PageSize, beginDateSoldQry = parameters.BeginDateSoldQry, endDateSoldQry = parameters.EndDateSoldQry, customerId = parameters.CustomerId, productId = parameters.ProductId, storeId = parameters.StoreId, orderBy = parameters.OrderFields })); default: return(Url.Link(nameof(GetSaless), new { fields = parameters.ShapeFields, pageNumber = parameters.PageNumber, pageSize = parameters.PageSize, beginDateSoldQry = parameters.BeginDateSoldQry, endDateSoldQry = parameters.EndDateSoldQry, customerId = parameters.CustomerId, productId = parameters.ProductId, storeId = parameters.StoreId, orderBy = parameters.OrderFields })); } }
public async void DoCurdOperation() { var salesDao = Provider.GetService <ISalesDao>(); var customerDao = Provider.GetService <ICustomerDao>(); var productDao = Provider.GetService <IProductDao>(); var storeDao = Provider.GetService <IStoreDao>(); var mapper = Provider.GetService <IMapper> (); #region Test add var customer1 = new Customer { Name = "Tom", Address = "City center" }; var customer2 = new Customer { Name = "Kate", Address = "Mt Eden" }; var product1 = new Product { Name = "Apple", Price = 5 }; var product2 = new Product { Name = "Banana", Price = 10 }; var store1 = new Store { Name = "Count down", Address = "Mt Albert" }; var store2 = new Store { Name = "New world", Address = "St Lukes" }; var sales1 = new Sales { DateSold = new DateTime(2008, 3, 1), Customer = customer1, Product = product1, Store = store1 }; var sales2 = new Sales { DateSold = new DateTime(2019, 6, 20), Customer = customer2, Product = product1, Store = store2 }; var sales3 = new Sales { DateSold = new DateTime(2020, 1, 30), Customer = customer1, Product = product2, Store = store2 }; bool result = await salesDao.Add(sales1); Assert.True(result); result = await salesDao.Add(sales2); Assert.True(result); result = await salesDao.Add(sales3); Assert.True(result); #endregion #region Test query var qry = new SalesQryDto { BeginDateSoldQry = new DateTime(2017, 1, 1), PageNumber = 1, PageSize = 10, OrderFields = "DateSold desc" }; PagedList <Sales> results = await salesDao.Query(qry); Assert.Equal(2, results.TotalCount); Assert.Equal(new DateTime(2020, 1, 30), results[0].DateSold); Assert.True(results[0].DateSold > results[1].DateSold); qry = new SalesQryDto { BeginDateSoldQry = new DateTime(2017, 1, 1), EndDateSoldQry = new DateTime(2020, 1, 1), PageNumber = 1, PageSize = 10, OrderFields = "DateSold desc" }; results = await salesDao.Query(qry); Assert.Equal(1, results.TotalCount); Assert.Equal(new DateTime(2019, 6, 20), results[0].DateSold); qry = new SalesQryDto { CustomerId = customer1.Id, PageNumber = 1, PageSize = 10, OrderFields = "DateSold desc" }; results = await salesDao.Query(qry); Assert.Equal(2, results.TotalCount); Assert.True(results[0].DateSold > results[1].DateSold); Assert.Equal("Tom", results[0].Customer.Name); Assert.Equal("Banana", results[0].Product.Name); Assert.Equal("New world", results[0].Store.Name); qry = new SalesQryDto { ProductId = product2.Id, PageNumber = 1, PageSize = 10, OrderFields = "DateSold desc" }; results = await salesDao.Query(qry); Assert.Equal(1, results.TotalCount); Assert.Equal(new DateTime(2020, 1, 30), results[0].DateSold); Assert.Equal("Banana", results[0].Product.Name); Assert.Equal("Tom", results[0].Customer.Name); Assert.Equal("New world", results[0].Store.Name); #endregion #region Update sales1.Customer.Name = "Jack"; sales1.DateSold = new DateTime(2019, 12, 30); result = await salesDao.Update(sales1); Assert.True(result); var sales = await salesDao.GetObjectById(sales1.Id); Assert.Equal(new DateTime(2019, 12, 30), sales.DateSold); Assert.Equal(sales1.Customer.Name, sales.Customer.Name); Assert.Equal(sales1.Product.Price, sales.Product.Price); Assert.Equal(sales1.Store.Address, sales.Store.Address); sales1.Product = null; sales = await salesDao.GetObjectById(sales1.Id); Assert.NotNull(sales); Assert.Null(sales.Product); #endregion /* #region Delete * result =await salesDao.Delete(sales2.Id); * Assert.True(result); * sales=await salesDao.GetObjectById(sales2.Id); * Assert.Null(sales); * result = await salesDao.Delete(sales1.Id); * Assert.True(result); * result = await salesDao.Delete(sales3.Id); * Assert.True(result); * result = await customerDao.Delete(customer1.Id); * Assert.True(result); * result = await customerDao.Delete(customer2.Id); * Assert.True(result); * result = await productDao.Delete(product1.Id); * Assert.True(result); * result = await productDao.Delete(product2.Id); * Assert.True(result); * result = await storeDao.Delete(store1.Id); * Assert.True(result); * result = await storeDao.Delete(store2.Id); * Assert.True(result); #endregion */ }