示例#1
0
        public async Task <AddOrderPayload> AddOrderAsync(
            AddOrderInput input,
            [Service] OMSOrdersContext context)
        {
            if (string.IsNullOrWhiteSpace(input.Email) || string.IsNullOrWhiteSpace(input.UserName) ||
                string.IsNullOrWhiteSpace(input.OrderName) || string.IsNullOrWhiteSpace(input.Address))
            {
                _logger.LogError("invalid input {@input}", input);
                throw new Exception("Bad request");
            }

            var order = new Orders
            {
                OrderName   = input.OrderName,
                Email       = input.Email,
                PhoneNumber = input.PhoneNumber,
                UserName    = input.UserName,
                Address     = input.Address,
                ProductId   = input.ProductId
            };

            _logger.LogDebug("adding order {@input}", input);

            context.Orders.Add(order);
            await context.SaveChangesAsync();

            return(new AddOrderPayload(new GQLModels.Orders
            {
                OrderName = input.OrderName,
                Email = input.Email,
                PhoneNumber = input.PhoneNumber,
                UserName = input.UserName,
                Address = input.Address
            }));
        }
示例#2
0
        public async void AddOrderShouldThrowErrorForInvalidInput()
        {
            //Arrange
            var order = new AddOrderInput();

            //Act
            var mutationStatus = await Assert.ThrowsAsync <Exception>(() => mutation.AddOrderAsync(order, null));

            //Assert
            mutationStatus.Message.Should().Be("Bad request");
        }
示例#3
0
        public async Task <AddOrderPayload> AddOrderAsync(
            AddOrderInput input,
            [ScopedService] ApplicationDbContext context)
        {
            var order = new Order
            {
                OrderDate = input.OrderDate
            };

            context.Orders.Add(order);
            await context.SaveChangesAsync();

            return(new AddOrderPayload(order));
        }
        private async Task <dynamic> AddOrderForItem(IEnumerable <Guid> itemIds, int quantity = 1)
        {
            var items = itemIds.Select(itemId => new OrderItemInput(itemId, quantity)).ToList();

            var addOrderInput = new AddOrderInput(
                "Fred",
                "Address1",
                "Address2",
                "Town",
                "Postcode",
                "1234",
                "*****@*****.**",
                "Under the mat",
                Guid.NewGuid(),
                items
                );


            IExecutionResult result = await ServiceProvider.ExecuteRequestAsync(
                QueryRequestBuilder
                .New()
                .SetQuery(@"
                        mutation AddOrder($input: AddOrderInput!) {
                          addOrder(input: $input) {
                            order {
                              id
                              createdAt
                            }
                          }
                        }
                    ")
                .SetVariableValue(name : "input", value : addOrderInput)
                .Create()
                );

            var json = await result.ToJsonAsync();

            Assert.NotNull(json);

            ExpandoObject response = JsonConvert.DeserializeObject <ExpandoObject>(json, new ExpandoObjectConverter());

            Assert.NotNull(response);

            return(response);
        }
        public async Task <AddOrderPayload> AddOrderAsync(AddOrderInput input,
                                                          [ScopedService] ApplicationDbContext dbContext)
        {
            // Check that there are quantities
            if (!input.Items.Any())
            {
                Error error = new("No items to order", "1010");
                throw new QueryException(error);
            }

            // Check the quantities are valid
            if (input.Items.Any(item => item.Quantity < 1 || item.Quantity > 99))
            {
                Error error = new ("Invalid order item quantity", "1011");
                throw new QueryException(error);
            }

            // Check that the items provided exist in the db
            var itemIds = input.Items.Select(item => item.ItemId).ToList();

            Model.Item[]? dbItems = await dbContext.Items
                                    .Where(i => itemIds.Contains(i.Id)).ToArrayAsync();

            if (dbItems.Length != input.Items.Count())
            {
                Error error = new("Invalid order item id", "1012");
                throw new QueryException(error);
            }

            // Create the order object.
            var orderId = Guid.NewGuid();

            Model.Order order = new Model.Order
            {
                Id                   = orderId,
                Name                 = input.Name,
                Address1             = input.Address1,
                Address2             = input.Address2,
                Town                 = input.Town,
                Postcode             = input.Postcode,
                Phone                = input.Phone,
                Email                = input.Email,
                DeliveryInstructions = input.DeliveryInstructions,
                OwnerId              = input.OwnerId,
                CreatedAt            = DateTime.Now
            };

            await dbContext.Orders.AddAsync(order);


            IEnumerable <OrderItemInput> items = input.Items;

            // Now add the order items
            foreach ((Guid itemId, var quantity) in items)
            {
                // Get a snapshot of the item when ordered
                Model.Item dbItem = dbItems.First(item => item.Id == itemId);

                OrderItem orderItem = new OrderItem
                {
                    OrderId     = orderId,
                    ItemId      = itemId,
                    Quantity    = quantity,
                    Name        = dbItem?.Name,
                    Description = dbItem?.Description
                };

                await dbContext.OrderItems.AddAsync(orderItem);
            }

            await dbContext.SaveChangesAsync();

            return(new AddOrderPayload(order));
        }
示例#6
0
        /// <summary>
        /// 生成运单
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <AddOrderOutput> AddOrder(AddOrderInput input)
        {
            input.AccessToken = AccessToken;

            return(await HttpPost <AddOrderOutput>(_AddOrderUrl, input));
        }
示例#7
0
        public async Task <ApiResult <AddOrderOutput> > Add([FromBody] AddOrderInput input, CancellationToken cancelToken)
        {
            if (Authorization == null)
            {
                return(new ApiResult <AddOrderOutput>(APIResultCode.Unknown, new AddOrderOutput {
                }, APIResultMessage.TokenNull));
            }

            //if (string.IsNullOrWhiteSpace(input.ApplicationRecordId))
            //{
            //    throw new NotImplementedException("业主认证Id为空!");
            //}

            if (string.IsNullOrWhiteSpace(input.AddressId))
            {
                throw new NotImplementedException("用户地址Id为空!");
            }

            if (string.IsNullOrWhiteSpace(input.ShopId))
            {
                throw new NotImplementedException("商铺Id为空!");
            }

            var user = _tokenRepository.GetUser(Authorization);

            if (user == null)
            {
                return(new ApiResult <AddOrderOutput>(APIResultCode.Unknown, new AddOrderOutput {
                }, APIResultMessage.TokenError));
            }
            //var ownerCertificationRecord = await _industryRepository.GetIncludeAsync(input.i, cancelToken);
            ////if (ownerCertificationRecord == null)
            ////{
            ////    throw new NotImplementedException("业主认证信息不正确!");
            ////}
            var shopUserAddress = await _shopUserAddressRepository.GetIncludeAsync(input.AddressId, cancelToken);

            if (shopUserAddress == null)
            {
                throw new NotImplementedException("收货地址信息不正确!");
            }
            if (shopUserAddress.Industry.BuildingUnit.Building.SmallDistrict.PropertyCompany == null)
            {
                throw new NotImplementedException("当前小区未配置服务物业不能进行下单!");
            }
            var entity = await _orderRepository.AddAsync(new OrderDto
            {
                ShopId           = input.ShopId,
                DeliveryPhone    = shopUserAddress.Industry.BuildingUnit.Building.SmallDistrict.PropertyCompany.Phone,
                DeliveryName     = shopUserAddress.Industry.BuildingUnit.Building.SmallDistrict.PropertyCompany.Name,
                OrderStatusValue = OrderStatus.Unpaid.Value,
                OrderStatusName  = OrderStatus.Unpaid.Name,
                //OwnerCertificationRecordId = input.ApplicationRecordId,
                ReceiverName  = shopUserAddress.ReceiverName,
                ReceiverPhone = shopUserAddress.ReceiverPhone,
                Address       = shopUserAddress.Industry.BuildingUnit.Building.SmallDistrict.Community.StreetOffice.State +
                                shopUserAddress.Industry.BuildingUnit.Building.SmallDistrict.Community.StreetOffice.City +
                                shopUserAddress.Industry.BuildingUnit.Building.SmallDistrict.Community.StreetOffice.Region +
                                shopUserAddress.Industry.BuildingUnit.Building.SmallDistrict.Community.StreetOffice.Name +
                                shopUserAddress.Industry.BuildingUnit.Building.SmallDistrict.Community.Name +
                                shopUserAddress.Industry.BuildingUnit.Building.SmallDistrict.Name +
                                shopUserAddress.Industry.BuildingUnit.Building.Name +
                                shopUserAddress.Industry.BuildingUnit.UnitName +
                                shopUserAddress.Industry.NumberOfLayers + "," +
                                shopUserAddress.Industry.Name,
                IndustryId      = shopUserAddress.IndustryId.ToString(),
                Number          = GenerateCode(""),
                OperationTime   = DateTimeOffset.Now,
                OperationUserId = user.Id.ToString()
            }, cancelToken);

            //try
            //{
            //    var shopUserList = await _userRepository.GetByShopIdAsync(entity.ShopId.ToString(), cancelToken);
            //    foreach (var item in shopUserList)
            //    {
            //        SignalR("2", entity.ShopId.ToString(), item.Id.ToString(), entity);
            //    }

            //}
            //catch (Exception)
            //{


            //}

            return(new ApiResult <AddOrderOutput>(APIResultCode.Success, new AddOrderOutput {
                Id = entity.Id.ToString()
            }));
        }