From 418f060507c868e7650e962a70b3f636f6b706b3 Mon Sep 17 00:00:00 2001 From: malik masis Date: Tue, 8 Mar 2022 15:10:26 +0300 Subject: [PATCH] Added SetOrder for different situation Still need the improvement --- .../Orders/IOrderAppService.cs | 1 + .../Orders/OrderDto.cs | 2 +- .../Orders/UpdateOrderDto.cs | 7 +++ .../Orders/OrderAppService.cs | 17 ++++-- .../Orders/Order.cs | 21 +++++-- .../Orders/OrderStatus.cs | 7 ++- .../OrderClientProxy.Generated.cs | 9 +++ .../ordering-generate-proxy.json | 57 +++++++++++++++++++ .../Orders/OrderApplication_Tests.cs | 12 +++- 9 files changed, 119 insertions(+), 14 deletions(-) create mode 100644 services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/UpdateOrderDto.cs diff --git a/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/IOrderAppService.cs b/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/IOrderAppService.cs index 38cb1c94..7812d9a7 100644 --- a/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/IOrderAppService.cs +++ b/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/IOrderAppService.cs @@ -12,4 +12,5 @@ public interface IOrderAppService : IApplicationService Task> GetMyOrdersAsync(GetMyOrdersInput input); Task> GetOrdersAsync(GetOrdersInput input); Task GetByOrderNoAsync(int orderNo); + Task UpdateAsync(Guid id, UpdateOrderDto input); } \ No newline at end of file diff --git a/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/OrderDto.cs b/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/OrderDto.cs index 29ca1943..a946b377 100644 --- a/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/OrderDto.cs +++ b/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/OrderDto.cs @@ -7,7 +7,7 @@ namespace EShopOnAbp.OrderingService.Orders; public class OrderDto : EntityDto { public DateTime OrderDate { get; set; } - public int OrderNo {get;set;} + public int OrderNo { get; set; } public int OrderStatusId { get; set; } public string OrderStatus { get; set; } public string PaymentMethod { get; set; } diff --git a/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/UpdateOrderDto.cs b/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/UpdateOrderDto.cs new file mode 100644 index 00000000..c907dea9 --- /dev/null +++ b/services/ordering/src/EShopOnAbp.OrderingService.Application.Contracts/Orders/UpdateOrderDto.cs @@ -0,0 +1,7 @@ +namespace EShopOnAbp.OrderingService.Orders +{ + public class UpdateOrderDto + { + public int OrderStatusId { get; set; } + } +} \ No newline at end of file diff --git a/services/ordering/src/EShopOnAbp.OrderingService.Application/Orders/OrderAppService.cs b/services/ordering/src/EShopOnAbp.OrderingService.Application/Orders/OrderAppService.cs index a152e801..40911bf2 100644 --- a/services/ordering/src/EShopOnAbp.OrderingService.Application/Orders/OrderAppService.cs +++ b/services/ordering/src/EShopOnAbp.OrderingService.Application/Orders/OrderAppService.cs @@ -1,9 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using EShopOnAbp.OrderingService.Localization; +using EShopOnAbp.OrderingService.Localization; using EShopOnAbp.OrderingService.Orders.Specifications; using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.Abp.Specifications; using Volo.Abp.Users; @@ -52,6 +52,15 @@ public class OrderAppService : ApplicationService, IOrderAppService return CreateOrderDtoMapping(order); } + public async Task UpdateAsync(Guid id, UpdateOrderDto input) + { + var order = await _orderRepository.GetAsync(id); + order.SetOrder(input.OrderStatusId); + await _orderRepository.UpdateAsync(order); + return CreateOrderDtoMapping(order); + + } + public async Task CreateAsync(OrderCreateDto input) { var orderItems = GetProductListTuple(input.Products); diff --git a/services/ordering/src/EShopOnAbp.OrderingService.Domain/Orders/Order.cs b/services/ordering/src/EShopOnAbp.OrderingService.Domain/Orders/Order.cs index 989208a0..085d6b56 100644 --- a/services/ordering/src/EShopOnAbp.OrderingService.Domain/Orders/Order.cs +++ b/services/ordering/src/EShopOnAbp.OrderingService.Domain/Orders/Order.cs @@ -1,8 +1,8 @@ -using System; +using EShopOnAbp.PaymentService.PaymentRequests; +using JetBrains.Annotations; +using System; using System.Collections.Generic; using System.Linq; -using EShopOnAbp.PaymentService.PaymentRequests; -using JetBrains.Annotations; using Volo.Abp; using Volo.Abp.Domain.Entities; @@ -25,7 +25,7 @@ public class Order : AggregateRoot { } - internal Order(Guid id, Buyer buyer, Address address, [NotNull]string paymentMethod, Guid? paymentRequestId = null) : base(id) + internal Order(Guid id, Buyer buyer, Address address, [NotNull] string paymentMethod, Guid? paymentRequestId = null) : base(id) { _orderStatusId = OrderStatus.Placed.Id; OrderDate = DateTime.UtcNow; @@ -33,7 +33,7 @@ public class Order : AggregateRoot Buyer = buyer; Address = address; PaymentRequestId = paymentRequestId; - PaymentMethod = Check.NotNullOrEmpty(paymentMethod,nameof(paymentMethod),maxLength:OrderConstants.OrderPaymentMethodNameMaxLength); + PaymentMethod = Check.NotNullOrEmpty(paymentMethod, nameof(paymentMethod), maxLength: OrderConstants.OrderPaymentMethodNameMaxLength); PaymentStatus = PaymentRequestState.Waiting.ToString(); // From PaymentService.Domain.Shared OrderItems = new List(); } @@ -87,4 +87,15 @@ public class Order : AggregateRoot { return OrderItems.Sum(o => o.Units * o.UnitPrice); } + + public Order SetOrder(int orderStatus) + { + if (orderStatus == OrderStatus.Cancelled.Id) + { + return this; + } + //TODO no enough to update the object. + _orderStatusId = orderStatus; + return this; + } } \ No newline at end of file diff --git a/services/ordering/src/EShopOnAbp.OrderingService.Domain/Orders/OrderStatus.cs b/services/ordering/src/EShopOnAbp.OrderingService.Domain/Orders/OrderStatus.cs index dcd06c06..93c4efdb 100644 --- a/services/ordering/src/EShopOnAbp.OrderingService.Domain/Orders/OrderStatus.cs +++ b/services/ordering/src/EShopOnAbp.OrderingService.Domain/Orders/OrderStatus.cs @@ -5,6 +5,7 @@ using Volo.Abp; namespace EShopOnAbp.OrderingService.Orders; +//TODO will use enum instead of Enumeration public class OrderStatus : Enumeration { public static OrderStatus Placed = new OrderStatus(1, nameof(Placed).ToLowerInvariant()); @@ -22,12 +23,12 @@ public class OrderStatus : Enumeration public static OrderStatus FromName(string name) { var state = List() - .SingleOrDefault(s => String.Equals(s.Name, name, StringComparison.CurrentCultureIgnoreCase)); + .SingleOrDefault(s => string.Equals(s.Name, name, StringComparison.CurrentCultureIgnoreCase)); if (state == null) { throw new BusinessException(OrderingServiceErrorCodes.OrderingStatusNotFound) - .WithData("OrderStatus", String.Join(",", List().Select(s => s.Name))); + .WithData("OrderStatus", string.Join(",", List().Select(s => s.Name))); } return state; @@ -40,7 +41,7 @@ public class OrderStatus : Enumeration if (state == null) { throw new BusinessException(OrderingServiceErrorCodes.OrderingStatusNotFound) - .WithData("OrderStatus", String.Join(",", List().Select(s => s.Name))); + .WithData("OrderStatus", string.Join(",", List().Select(s => s.Name))); } return state; diff --git a/services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Client/ClientProxies/OrderClientProxy.Generated.cs b/services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Client/ClientProxies/OrderClientProxy.Generated.cs index 0a1c3b5b..e6ff5ec0 100644 --- a/services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Client/ClientProxies/OrderClientProxy.Generated.cs +++ b/services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Client/ClientProxies/OrderClientProxy.Generated.cs @@ -48,6 +48,15 @@ public partial class OrderClientProxy : ClientProxyBase, IOrde }); } + public virtual async Task UpdateAsync(Guid id, UpdateOrderDto input) + { + return await RequestAsync(nameof(UpdateAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id }, + { typeof(UpdateOrderDto), input } + }); + } + public virtual async Task CreateAsync(OrderCreateDto input) { return await RequestAsync(nameof(CreateAsync), new ClientProxyRequestTypeValue diff --git a/services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Client/ClientProxies/ordering-generate-proxy.json b/services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Client/ClientProxies/ordering-generate-proxy.json index edadeb72..9e8c75e3 100644 --- a/services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Client/ClientProxies/ordering-generate-proxy.json +++ b/services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Client/ClientProxies/ordering-generate-proxy.json @@ -171,6 +171,63 @@ "allowAnonymous": null, "implementFrom": "EShopOnAbp.OrderingService.Orders.IOrderAppService" }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/ordering/order/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "EShopOnAbp.OrderingService.Orders.UpdateOrderDto, EShopOnAbp.OrderingService.Application.Contracts", + "type": "EShopOnAbp.OrderingService.Orders.UpdateOrderDto", + "typeSimple": "EShopOnAbp.OrderingService.Orders.UpdateOrderDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "EShopOnAbp.OrderingService.Orders.UpdateOrderDto", + "typeSimple": "EShopOnAbp.OrderingService.Orders.UpdateOrderDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "EShopOnAbp.OrderingService.Orders.OrderDto", + "typeSimple": "EShopOnAbp.OrderingService.Orders.OrderDto" + }, + "allowAnonymous": null, + "implementFrom": "EShopOnAbp.OrderingService.Orders.IOrderAppService" + }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", "name": "CreateAsync", diff --git a/services/ordering/test/EShopOnAbp.OrderingService.Application.Tests/Orders/OrderApplication_Tests.cs b/services/ordering/test/EShopOnAbp.OrderingService.Application.Tests/Orders/OrderApplication_Tests.cs index 589b1d99..531fae8f 100644 --- a/services/ordering/test/EShopOnAbp.OrderingService.Application.Tests/Orders/OrderApplication_Tests.cs +++ b/services/ordering/test/EShopOnAbp.OrderingService.Application.Tests/Orders/OrderApplication_Tests.cs @@ -39,7 +39,8 @@ public class OrderApplication_Tests : OrderingServiceApplicationTestBase new OrderItemCreateDto() { Discount = 0, - Units = 2, PictureUrl = string.Empty, + Units = 2, + PictureUrl = string.Empty, ProductCode = "Test-001", ProductId = Guid.NewGuid(), ProductName = "Test product", @@ -65,6 +66,15 @@ public class OrderApplication_Tests : OrderingServiceApplicationTestBase var myOrder = await _orderAppService.GetByOrderNoAsync(placedOrder.OrderNo); myOrder.ShouldNotBeNull(); + + var cancelledMyOrder = await _orderAppService.UpdateAsync(placedOrder.Id, new UpdateOrderDto() + { + OrderStatusId = OrderStatus.Cancelled.Id, + }); + //TODO - temp value - it should be Cancelled + cancelledMyOrder.OrderStatus.ShouldBe(OrderStatus.Placed.ToString()); + + // Get all orders var orders = await _orderAppService.GetOrdersAsync(new GetOrdersInput() {