From cd7b9e4ad258302cda0c5924f14ff207db0fac24 Mon Sep 17 00:00:00 2001 From: masoodafar-web Date: Fri, 21 Nov 2025 10:27:20 +0330 Subject: [PATCH] Merge branch 'newmain' --- .../SubmitShopBuyOrderCommand.cs | 7 ++ .../SubmitShopBuyOrderCommandHandler.cs | 16 ++++ .../SubmitShopBuyOrderCommandValidator.cs | 16 ++++ .../SubmitShopBuyOrderResponseDto.cs | 33 +++++++++ .../Services/UserOrderService.cs | 7 +- .../Protos/userorder.proto | 74 +++++++++++++------ .../SubmitShopBuyOrderRequestValidator.cs | 19 +++++ 7 files changed, 149 insertions(+), 23 deletions(-) create mode 100644 src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommand.cs create mode 100644 src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandHandler.cs create mode 100644 src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandValidator.cs create mode 100644 src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderResponseDto.cs create mode 100644 src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Validator/SubmitShopBuyOrderRequestValidator.cs diff --git a/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommand.cs b/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommand.cs new file mode 100644 index 0000000..cf15d62 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommand.cs @@ -0,0 +1,7 @@ +namespace FrontOffice.BFF.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; +public record SubmitShopBuyOrderCommand : IRequest +{ + //کل مبلغ قابل پرداخت + public long TotalAmount { get; init; } + +} \ No newline at end of file diff --git a/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandHandler.cs b/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandHandler.cs new file mode 100644 index 0000000..4213685 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandHandler.cs @@ -0,0 +1,16 @@ +namespace FrontOffice.BFF.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; +public class SubmitShopBuyOrderCommandHandler : IRequestHandler +{ + private readonly IApplicationContractContext _context; + + public SubmitShopBuyOrderCommandHandler(IApplicationContractContext context) + { + _context = context; + } + + public async Task Handle(SubmitShopBuyOrderCommand request, CancellationToken cancellationToken) + { + //TODO: Implement your business logic + return new SubmitShopBuyOrderResponseDto(); + } +} diff --git a/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandValidator.cs b/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandValidator.cs new file mode 100644 index 0000000..d846c59 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderCommandValidator.cs @@ -0,0 +1,16 @@ +namespace FrontOffice.BFF.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; +public class SubmitShopBuyOrderCommandValidator : AbstractValidator +{ + public SubmitShopBuyOrderCommandValidator() + { + RuleFor(model => model.TotalAmount) + .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/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderResponseDto.cs b/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderResponseDto.cs new file mode 100644 index 0000000..a8b960b --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserOrderCQ/Commands/SubmitShopBuyOrder/SubmitShopBuyOrderResponseDto.cs @@ -0,0 +1,33 @@ +namespace FrontOffice.BFF.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; +public class SubmitShopBuyOrderResponseDto +{ + //شناسه + public long OrderId { get; set; } + // + public string PaymentStatus { get; set; } + // + public DateTime? Created { get; set; } + // + public string? 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/FrontOffice.BFF.WebApi/Services/UserOrderService.cs b/src/FrontOffice.BFF.WebApi/Services/UserOrderService.cs index f5a306b..6d9d42b 100644 --- a/src/FrontOffice.BFF.WebApi/Services/UserOrderService.cs +++ b/src/FrontOffice.BFF.WebApi/Services/UserOrderService.cs @@ -1,10 +1,11 @@ -using FrontOffice.BFF.UserOrder.Protobuf.Protos.UserOrder; +using FrontOffice.BFF.Protobuf.Protos.UserOrder; using FrontOffice.BFF.WebApi.Common.Services; using FrontOffice.BFF.Application.UserOrderCQ.Commands.CreateNewUserOrder; using FrontOffice.BFF.Application.UserOrderCQ.Commands.UpdateUserOrder; using FrontOffice.BFF.Application.UserOrderCQ.Commands.DeleteUserOrder; using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetUserOrder; using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter; +using FrontOffice.BFF.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; namespace FrontOffice.BFF.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); + } } diff --git a/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Protos/userorder.proto b/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Protos/userorder.proto index db85881..4fbf764 100644 --- a/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Protos/userorder.proto +++ b/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Protos/userorder.proto @@ -42,6 +42,12 @@ service UserOrderContract }; }; + rpc SubmitShopBuyOrder(SubmitShopBuyOrderRequest) returns (SubmitShopBuyOrderResponse){ + option (google.api.http) = { + post: "/SubmitShopBuyOrder" + body: "*" + }; + }; } message CreateNewUserOrderRequest { @@ -113,31 +119,55 @@ message GetAllUserOrderByFilterResponseModel int64 user_id = 7; int64 user_address_id = 8; } - -message PaginationState +message SubmitShopBuyOrderRequest { - int32 page_number = 1; - - int32 page_size = 2; + int64 total_amount = 1; } -message MetaData +message SubmitShopBuyOrderResponse { - int64 current_page = 1; - - int64 total_page = 2; - - int64 page_size = 3; - - int64 total_count = 4; - - bool has_previous = 5; - - bool has_next = 6; + int64 order_id = 1; + string payment_status = 2; + google.protobuf.Timestamp created = 3; + google.protobuf.StringValue payment_method = 4; + google.protobuf.StringValue user_address_text = 5; + google.protobuf.Int64Value total_amount = 6; + repeated SubmitShopBuyOrderFactorDetail factor_details = 7; } -message DecimalValue +message SubmitShopBuyOrderFactorDetail { - - int64 units = 1; - - sfixed32 nanos = 2; + 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; } + + message PaginationState + { + int32 page_number = 1; + + int32 page_size = 2; + } + message MetaData + { + int64 current_page = 1; + + int64 total_page = 2; + + int64 page_size = 3; + + int64 total_count = 4; + + bool has_previous = 5; + + bool has_next = 6; + } + message DecimalValue + { + + int64 units = 1; + + sfixed32 nanos = 2; + } + \ No newline at end of file diff --git a/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Validator/SubmitShopBuyOrderRequestValidator.cs b/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Validator/SubmitShopBuyOrderRequestValidator.cs new file mode 100644 index 0000000..0fd8b42 --- /dev/null +++ b/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Validator/SubmitShopBuyOrderRequestValidator.cs @@ -0,0 +1,19 @@ +using FluentValidation; +using FrontOfficeMicroservice.Protobuf.Protos.UserOrder; +namespace FrontOfficeMicroservice.Protobuf.Validator.UserOrder; + +public class SubmitShopBuyOrderRequestValidator : AbstractValidator +{ + public SubmitShopBuyOrderRequestValidator() + { + RuleFor(model => model.TotalAmount) + .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); + }; +}