[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));
        }
Ejemplo n.º 2
0
        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
                }));
            }
        }
Ejemplo n.º 5
0
        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
             */
        }