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 })); }
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"); }
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)); }
/// <summary> /// 生成运单 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <AddOrderOutput> AddOrder(AddOrderInput input) { input.AccessToken = AccessToken; return(await HttpPost <AddOrderOutput>(_AddOrderUrl, input)); }
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() })); }