From 56478c79c2dc82fa897d1358834429aae60d6e6d Mon Sep 17 00:00:00 2001 From: masoodafar-web Date: Sat, 22 Nov 2025 22:02:04 +0330 Subject: [PATCH] =?UTF-8?q?Generator=20Changes=20at=2011/22/2025=209:58:16?= =?UTF-8?q?=E2=80=AFPM=20+03:30?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CreateNewUserOrderCommand.cs | 4 +- .../CreateNewUserOrderCommandValidator.cs | 3 + .../SubmitShopBuyOrderCommand.cs | 9 ++ .../SubmitShopBuyOrderCommandHandler.cs | 17 ++++ .../SubmitShopBuyOrderCommandValidator.cs | 18 ++++ .../SubmitShopBuyOrderResponseDto.cs | 33 +++++++ .../UpdateUserOrder/UpdateUserOrderCommand.cs | 4 +- .../UpdateUserOrderCommandValidator.cs | 3 + .../SubmitShopBuyOrderEventHandler.cs | 22 +++++ .../GetAllUserOrderByFilterQuery.cs | 20 +++-- .../GetAllUserOrderByFilterResponseDto.cs | 24 ++++-- .../GetUserOrder/GetUserOrderResponseDto.cs | 8 +- .../Entities/UserOrder.cs | 3 +- .../Enums/PaymentMethod.cs | 7 ++ .../SubmitShopBuyOrderEvent.cs | 8 ++ .../Protos/public_messages.proto | 5 ++ .../Protos/userorder.proto | 85 +++++++++++++++++-- .../CreateNewUserOrderRequestValidator.cs | 3 + .../SubmitShopBuyOrderRequestValidator.cs | 21 +++++ .../UpdateUserOrderRequestValidator.cs | 3 + .../Common/Mappings/UserOrderProfile.cs | 7 +- .../Services/UserOrderService.cs | 5 ++ 22 files changed, 281 insertions(+), 31 deletions(-) create mode 100644 src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommand.cs create mode 100644 src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandHandler.cs create mode 100644 src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandValidator.cs create mode 100644 src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderResponseDto.cs create mode 100644 src/CMSMicroservice.Application/UserOrderCQ/EventHandlers/SubmitShopBuyOrderEventHandlers/SubmitShopBuyOrderEventHandler.cs create mode 100644 src/CMSMicroservice.Domain/Enums/PaymentMethod.cs create mode 100644 src/CMSMicroservice.Domain/Events/UserOrderEvents/SubmitShopBuyOrderEvent.cs create mode 100644 src/CMSMicroservice.Protobuf/Validator/UserOrder/SubmitShopBuyOrderRequestValidator.cs diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Commands/CreateNewUserOrder/CreateNewUserOrderCommand.cs b/src/CMSMicroservice.Application/UserOrderCQ/Commands/CreateNewUserOrder/CreateNewUserOrderCommand.cs index 4dd0aa9..b564346 100644 --- a/src/CMSMicroservice.Application/UserOrderCQ/Commands/CreateNewUserOrder/CreateNewUserOrderCommand.cs +++ b/src/CMSMicroservice.Application/UserOrderCQ/Commands/CreateNewUserOrder/CreateNewUserOrderCommand.cs @@ -8,12 +8,14 @@ public record CreateNewUserOrderCommand : IRequest model.PackageId) .NotNull(); RuleFor(model => model.PaymentStatus) + .IsInEnum() .NotNull(); RuleFor(model => model.UserId) .NotNull(); RuleFor(model => model.UserAddressId) .NotNull(); + RuleFor(model => model.PaymentMethod) + .IsInEnum(); } public Func>> ValidateValue => async (model, propertyName) => { diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommand.cs b/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommand.cs new file mode 100644 index 0000000..1732438 --- /dev/null +++ b/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommand.cs @@ -0,0 +1,9 @@ +namespace CMSMicroservice.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; +public record SubmitShopBuyOrderCommand : IRequest +{ + //کل مبلغ ورودی + public long TotalAmount { get; init; } + //شناسه کاربر + public long UserId { get; init; } + +} \ No newline at end of file diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandHandler.cs b/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandHandler.cs new file mode 100644 index 0000000..08ffeeb --- /dev/null +++ b/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandHandler.cs @@ -0,0 +1,17 @@ +using CMSMicroservice.Domain.Events; +namespace CMSMicroservice.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; +public class SubmitShopBuyOrderCommandHandler : IRequestHandler +{ + private readonly IApplicationDbContext _context; + + public SubmitShopBuyOrderCommandHandler(IApplicationDbContext context) + { + _context = context; + } + + public async Task Handle(SubmitShopBuyOrderCommand request, CancellationToken cancellationToken) + { + //TODO: Implement your business logic + return new SubmitShopBuyOrderResponseDto(); + } +} diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandValidator.cs b/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandValidator.cs new file mode 100644 index 0000000..106d6e5 --- /dev/null +++ b/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandValidator.cs @@ -0,0 +1,18 @@ +namespace CMSMicroservice.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; +public class SubmitShopBuyOrderCommandValidator : AbstractValidator +{ + public SubmitShopBuyOrderCommandValidator() + { + RuleFor(model => model.TotalAmount) + .NotNull(); + RuleFor(model => model.UserId) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((SubmitShopBuyOrderCommand)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderResponseDto.cs b/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderResponseDto.cs new file mode 100644 index 0000000..fbb3d6b --- /dev/null +++ b/src/CMSMicroservice.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderResponseDto.cs @@ -0,0 +1,33 @@ +namespace CMSMicroservice.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; +public class SubmitShopBuyOrderResponseDto +{ + //شناسه + public long Id { get; set; } + // + public PaymentStatus PaymentStatus { get; set; } + // + public DateTime? Created { get; set; } + // + public PaymentMethod? PaymentMethod { get; set; } + // + public string? UserAddressText { get; set; } + // + public long? TotalAmount { get; set; } + // + public List? FactorDetails { get; set; } + +}public class SubmitShopBuyOrderFactorDetail +{ + //شناسه + public long ProductId { get; set; } + // + public string ProductTitle { get; set; } + // + public string? ProductThumbnailPath { get; set; } + // + public long? UnitPrice { get; set; } + // + public int? Count { get; set; } + // + public long? UnitDiscountPrice { get; set; } +} diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Commands/UpdateUserOrder/UpdateUserOrderCommand.cs b/src/CMSMicroservice.Application/UserOrderCQ/Commands/UpdateUserOrder/UpdateUserOrderCommand.cs index 7fbe596..b2f4650 100644 --- a/src/CMSMicroservice.Application/UserOrderCQ/Commands/UpdateUserOrder/UpdateUserOrderCommand.cs +++ b/src/CMSMicroservice.Application/UserOrderCQ/Commands/UpdateUserOrder/UpdateUserOrderCommand.cs @@ -10,12 +10,14 @@ public record UpdateUserOrderCommand : IRequest //شناسه تراکنش public long? TransactionId { get; init; } //وضعیت پرداخت - public bool PaymentStatus { get; init; } + public PaymentStatus PaymentStatus { get; init; } //تاریخ پرداخت public DateTime? PaymentDate { get; init; } //شناسه کاربر public long UserId { get; init; } //شناسه آدرس کاربر public long UserAddressId { get; init; } + // + public PaymentMethod? PaymentMethod { get; init; } } \ No newline at end of file diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Commands/UpdateUserOrder/UpdateUserOrderCommandValidator.cs b/src/CMSMicroservice.Application/UserOrderCQ/Commands/UpdateUserOrder/UpdateUserOrderCommandValidator.cs index 74440a1..0d673fb 100644 --- a/src/CMSMicroservice.Application/UserOrderCQ/Commands/UpdateUserOrder/UpdateUserOrderCommandValidator.cs +++ b/src/CMSMicroservice.Application/UserOrderCQ/Commands/UpdateUserOrder/UpdateUserOrderCommandValidator.cs @@ -10,11 +10,14 @@ public class UpdateUserOrderCommandValidator : AbstractValidator model.PackageId) .NotNull(); RuleFor(model => model.PaymentStatus) + .IsInEnum() .NotNull(); RuleFor(model => model.UserId) .NotNull(); RuleFor(model => model.UserAddressId) .NotNull(); + RuleFor(model => model.PaymentMethod) + .IsInEnum(); } public Func>> ValidateValue => async (model, propertyName) => { diff --git a/src/CMSMicroservice.Application/UserOrderCQ/EventHandlers/SubmitShopBuyOrderEventHandlers/SubmitShopBuyOrderEventHandler.cs b/src/CMSMicroservice.Application/UserOrderCQ/EventHandlers/SubmitShopBuyOrderEventHandlers/SubmitShopBuyOrderEventHandler.cs new file mode 100644 index 0000000..2cf4931 --- /dev/null +++ b/src/CMSMicroservice.Application/UserOrderCQ/EventHandlers/SubmitShopBuyOrderEventHandlers/SubmitShopBuyOrderEventHandler.cs @@ -0,0 +1,22 @@ +using CMSMicroservice.Domain.Events; +using Microsoft.Extensions.Logging; + +namespace CMSMicroservice.Application.UserOrderCQ.EventHandlers; + +public class SubmitShopBuyOrderEventHandler : INotificationHandler +{ + private readonly ILogger< + SubmitShopBuyOrderEventHandler> _logger; + + public SubmitShopBuyOrderEventHandler(ILogger logger) + { + _logger = logger; + } + + public Task Handle(SubmitShopBuyOrderEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().Name); + + return Task.CompletedTask; + } +} diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetAllUserOrderByFilter/GetAllUserOrderByFilterQuery.cs b/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetAllUserOrderByFilter/GetAllUserOrderByFilterQuery.cs index 2ffbccd..6f576d2 100644 --- a/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetAllUserOrderByFilter/GetAllUserOrderByFilterQuery.cs +++ b/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetAllUserOrderByFilter/GetAllUserOrderByFilterQuery.cs @@ -10,20 +10,22 @@ public record GetAllUserOrderByFilterQuery : IRequest FactorDetailss { get; set; } //Transactions Collection Navigation Reference diff --git a/src/CMSMicroservice.Domain/Enums/PaymentMethod.cs b/src/CMSMicroservice.Domain/Enums/PaymentMethod.cs new file mode 100644 index 0000000..73de3ea --- /dev/null +++ b/src/CMSMicroservice.Domain/Enums/PaymentMethod.cs @@ -0,0 +1,7 @@ +namespace CMSMicroservice.Domain.Enums; +// +public enum PaymentMethod +{ + IPG = 0, + Wallet = 1, +} diff --git a/src/CMSMicroservice.Domain/Events/UserOrderEvents/SubmitShopBuyOrderEvent.cs b/src/CMSMicroservice.Domain/Events/UserOrderEvents/SubmitShopBuyOrderEvent.cs new file mode 100644 index 0000000..7e68073 --- /dev/null +++ b/src/CMSMicroservice.Domain/Events/UserOrderEvents/SubmitShopBuyOrderEvent.cs @@ -0,0 +1,8 @@ +namespace CMSMicroservice.Domain.Events; +public class SubmitShopBuyOrderEvent : BaseEvent +{ + public SubmitShopBuyOrderEvent(UserOrder item) + { + } + public UserOrder Item { get; } +} diff --git a/src/CMSMicroservice.Protobuf/Protos/public_messages.proto b/src/CMSMicroservice.Protobuf/Protos/public_messages.proto index 28bf868..2580ab1 100644 --- a/src/CMSMicroservice.Protobuf/Protos/public_messages.proto +++ b/src/CMSMicroservice.Protobuf/Protos/public_messages.proto @@ -49,3 +49,8 @@ enum ContractType Main = 0; CMS = 1; } +enum PaymentMethod +{ + IPG = 0; + Wallet = 1; +} diff --git a/src/CMSMicroservice.Protobuf/Protos/userorder.proto b/src/CMSMicroservice.Protobuf/Protos/userorder.proto index 4779505..fb7a183 100644 --- a/src/CMSMicroservice.Protobuf/Protos/userorder.proto +++ b/src/CMSMicroservice.Protobuf/Protos/userorder.proto @@ -43,16 +43,29 @@ service UserOrderContract }; }; + rpc SubmitShopBuyOrder(SubmitShopBuyOrderRequest) returns (SubmitShopBuyOrderResponse){ + option (google.api.http) = { + post: "/SubmitShopBuyOrder" + body: "*" + }; + }; } message CreateNewUserOrderRequest { int64 price = 1; int64 package_id = 2; google.protobuf.Int64Value transaction_id = 3; - bool payment_status = 4; + oneof PaymentStatus_item + { + messages.PaymentStatus payment_status = 4; + } google.protobuf.Timestamp payment_date = 5; int64 user_id = 6; int64 user_address_id = 7; + oneof PaymentMethod_item + { + messages.PaymentMethod payment_method = 8; + } } message CreateNewUserOrderResponse { @@ -64,10 +77,17 @@ message UpdateUserOrderRequest int64 price = 2; int64 package_id = 3; google.protobuf.Int64Value transaction_id = 4; - bool payment_status = 5; + oneof PaymentStatus_item + { + messages.PaymentStatus payment_status = 5; + } google.protobuf.Timestamp payment_date = 6; int64 user_id = 7; int64 user_address_id = 8; + oneof PaymentMethod_item + { + messages.PaymentMethod payment_method = 9; + } } message DeleteUserOrderRequest { @@ -83,10 +103,19 @@ message GetUserOrderResponse int64 price = 2; int64 package_id = 3; google.protobuf.Int64Value transaction_id = 4; - bool payment_status = 5; + oneof PaymentStatus_item + { + messages.PaymentStatus payment_status = 5; + } google.protobuf.Timestamp payment_date = 6; int64 user_id = 7; int64 user_address_id = 8; + oneof PaymentMethod_item + { + messages.PaymentMethod payment_method = 9; + } + google.protobuf.Int64Value total_amount = 10; + google.protobuf.StringValue user_address_text = 11; } message GetAllUserOrderByFilterRequest { @@ -100,10 +129,17 @@ message GetAllUserOrderByFilterFilter google.protobuf.Int64Value price = 2; google.protobuf.Int64Value package_id = 3; google.protobuf.Int64Value transaction_id = 4; - google.protobuf.Int32Value payment_status = 5; + oneof PaymentStatus_item + { + messages.PaymentStatus payment_status = 5; + } google.protobuf.Timestamp payment_date = 6; google.protobuf.Int64Value user_id = 7; google.protobuf.Int64Value user_address_id = 8; + oneof PaymentMethod_item + { + messages.PaymentMethod payment_method = 9; + } } message GetAllUserOrderByFilterResponse { @@ -116,8 +152,47 @@ message GetAllUserOrderByFilterResponseModel int64 price = 2; int64 package_id = 3; google.protobuf.Int64Value transaction_id = 4; - int32 payment_status = 5; + oneof PaymentStatus_item + { + messages.PaymentStatus payment_status = 5; + } google.protobuf.Timestamp payment_date = 6; int64 user_id = 7; int64 user_address_id = 8; + oneof PaymentMethod_item + { + messages.PaymentMethod payment_method = 9; + } + google.protobuf.StringValue user_address_text = 10; + google.protobuf.Int64Value total_amount = 11; +} +message SubmitShopBuyOrderRequest +{ + int64 total_amount = 1; + int64 user_id = 2; +} +message SubmitShopBuyOrderResponse +{ + int64 id = 1; + oneof PaymentStatus_item + { + messages.PaymentStatus payment_status = 2; + } + google.protobuf.Timestamp created = 3; + oneof PaymentMethod_item + { + messages.PaymentMethod payment_method = 4; + } + google.protobuf.StringValue user_address_text = 5; + google.protobuf.Int64Value total_amount = 6; + repeated SubmitShopBuyOrderFactorDetail factor_details = 7; +} +message SubmitShopBuyOrderFactorDetail +{ + int64 product_id = 1; + string product_title = 2; + google.protobuf.StringValue product_thumbnail_path = 3; + google.protobuf.Int64Value unit_price = 4; + google.protobuf.Int32Value count = 5; + google.protobuf.Int64Value unit_discount_price = 6; } diff --git a/src/CMSMicroservice.Protobuf/Validator/UserOrder/CreateNewUserOrderRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/UserOrder/CreateNewUserOrderRequestValidator.cs index d6e33fb..03b8137 100644 --- a/src/CMSMicroservice.Protobuf/Validator/UserOrder/CreateNewUserOrderRequestValidator.cs +++ b/src/CMSMicroservice.Protobuf/Validator/UserOrder/CreateNewUserOrderRequestValidator.cs @@ -11,11 +11,14 @@ public class CreateNewUserOrderRequestValidator : AbstractValidator model.PackageId) .NotNull(); RuleFor(model => model.PaymentStatus) + .IsInEnum() .NotNull(); RuleFor(model => model.UserId) .NotNull(); RuleFor(model => model.UserAddressId) .NotNull(); + RuleFor(model => model.PaymentMethod) + .IsInEnum(); } public Func>> ValidateValue => async (model, propertyName) => { diff --git a/src/CMSMicroservice.Protobuf/Validator/UserOrder/SubmitShopBuyOrderRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/UserOrder/SubmitShopBuyOrderRequestValidator.cs new file mode 100644 index 0000000..813c864 --- /dev/null +++ b/src/CMSMicroservice.Protobuf/Validator/UserOrder/SubmitShopBuyOrderRequestValidator.cs @@ -0,0 +1,21 @@ +using FluentValidation; +using CMSMicroservice.Protobuf.Protos.UserOrder; +namespace CMSMicroservice.Protobuf.Validator.UserOrder; + +public class SubmitShopBuyOrderRequestValidator : AbstractValidator +{ + public SubmitShopBuyOrderRequestValidator() + { + RuleFor(model => model.TotalAmount) + .NotNull(); + RuleFor(model => model.UserId) + .NotNull(); + } + public Func>> ValidateValue => async (model, propertyName) => + { + var result = await ValidateAsync(ValidationContext.CreateWithOptions((SubmitShopBuyOrderRequest)model, x => x.IncludeProperties(propertyName))); + if (result.IsValid) + return Array.Empty(); + return result.Errors.Select(e => e.ErrorMessage); + }; +} diff --git a/src/CMSMicroservice.Protobuf/Validator/UserOrder/UpdateUserOrderRequestValidator.cs b/src/CMSMicroservice.Protobuf/Validator/UserOrder/UpdateUserOrderRequestValidator.cs index 513bb89..f1d64f1 100644 --- a/src/CMSMicroservice.Protobuf/Validator/UserOrder/UpdateUserOrderRequestValidator.cs +++ b/src/CMSMicroservice.Protobuf/Validator/UserOrder/UpdateUserOrderRequestValidator.cs @@ -13,11 +13,14 @@ public class UpdateUserOrderRequestValidator : AbstractValidator model.PackageId) .NotNull(); RuleFor(model => model.PaymentStatus) + .IsInEnum() .NotNull(); RuleFor(model => model.UserId) .NotNull(); RuleFor(model => model.UserAddressId) .NotNull(); + RuleFor(model => model.PaymentMethod) + .IsInEnum(); } public Func>> ValidateValue => async (model, propertyName) => { diff --git a/src/CMSMicroservice.WebApi/Common/Mappings/UserOrderProfile.cs b/src/CMSMicroservice.WebApi/Common/Mappings/UserOrderProfile.cs index ae30672..6ab5345 100644 --- a/src/CMSMicroservice.WebApi/Common/Mappings/UserOrderProfile.cs +++ b/src/CMSMicroservice.WebApi/Common/Mappings/UserOrderProfile.cs @@ -3,8 +3,9 @@ namespace CMSMicroservice.WebApi.Common.Mappings; public class UserOrderProfile : IRegister { void IRegister.Register(TypeAdapterConfig config) - { - //config.NewConfig() - // .Map(dest => dest.FullName, src => $"{src.Firstname} {src.Lastname}"); + { + config.NewConfig() + .IgnoreIf((src, dest) => !src.Filter.HasPaymentStatus, dest => dest.Filter.PaymentStatus) + .IgnoreIf((src, dest) => !src.Filter.HasPaymentMethod, dest => dest.Filter.PaymentMethod); } } diff --git a/src/CMSMicroservice.WebApi/Services/UserOrderService.cs b/src/CMSMicroservice.WebApi/Services/UserOrderService.cs index cb93971..d4959eb 100644 --- a/src/CMSMicroservice.WebApi/Services/UserOrderService.cs +++ b/src/CMSMicroservice.WebApi/Services/UserOrderService.cs @@ -5,6 +5,7 @@ using CMSMicroservice.Application.UserOrderCQ.Commands.UpdateUserOrder; using CMSMicroservice.Application.UserOrderCQ.Commands.DeleteUserOrder; using CMSMicroservice.Application.UserOrderCQ.Queries.GetUserOrder; using CMSMicroservice.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter; +using CMSMicroservice.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; namespace CMSMicroservice.WebApi.Services; public class UserOrderService : UserOrderContract.UserOrderContractBase { @@ -34,4 +35,8 @@ public class UserOrderService : UserOrderContract.UserOrderContractBase { return await _dispatchRequestToCQRS.Handle(request, context); } + public override async Task SubmitShopBuyOrder(SubmitShopBuyOrderRequest request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } }