Add delivery status and tracking details to user order

This commit is contained in:
masoodafar-web
2025-11-27 18:36:36 +03:30
parent 3e5f8348c2
commit ebd48c02a5
11 changed files with 139 additions and 42 deletions

View File

@@ -1,19 +1,13 @@
namespace BackOffice.BFF.Application.UserOrderCQ.Commands.UpdateUserOrder;
public record UpdateUserOrderCommand : IRequest<Unit>
{
//شناسه
public long Id { get; init; }
//قیمت
public long Price { get; init; }
//شناسه پکیج
public long PackageId { get; init; }
//شناسه تراکنش
public long? TransactionId { get; init; }
//وضعیت پرداخت
public bool PaymentStatus { get; init; }
//تاریخ پرداخت
public DateTime? PaymentDate { get; init; }
//شناسه کاربر
public long UserId { get; init; }
}
// وضعیت ارسال (مقدار عددی DeliveryStatus)
public int DeliveryStatus { get; init; }
// کد رهگیری
public string? TrackingCode { get; init; }
// توضیحات ارسال
public string? DeliveryDescription { get; init; }
}

View File

@@ -1,6 +1,8 @@
using BackOffice.BFF.Application.Common.Interfaces;
using CMSMicroservice.Protobuf.Protos.UserOrder;
namespace BackOffice.BFF.Application.UserOrderCQ.Commands.UpdateUserOrder;
public class UpdateUserOrderCommandHandler : IRequestHandler<UpdateUserOrderCommand, Unit>
{
private readonly IApplicationContractContext _context;
@@ -12,7 +14,33 @@ public class UpdateUserOrderCommandHandler : IRequestHandler<UpdateUserOrderComm
public async Task<Unit> Handle(UpdateUserOrderCommand request, CancellationToken cancellationToken)
{
await _context.UserOrders.UpdateUserOrderAsync(request.Adapt<UpdateUserOrderRequest>(), cancellationToken: cancellationToken);
// ابتدا سفارش فعلی را از CMS می‌گیریم تا سایر فیلدها (مبلغ، پرداخت و ...) دست‌نخورده بمانند
var current = await _context.UserOrders.GetUserOrderAsync(new GetUserOrderRequest
{
Id = request.Id
}, cancellationToken: cancellationToken);
if (current is null)
return Unit.Value;
// ساخت درخواست کامل برای UpdateUserOrder در CMS
var updateRequest = new UpdateUserOrderRequest
{
Id = current.Id,
Amount = current.Amount,
PackageId = current.PackageId,
TransactionId = current.TransactionId,
PaymentStatus = current.PaymentStatus,
PaymentDate = current.PaymentDate,
UserId = current.UserId,
UserAddressId = current.UserAddressId,
PaymentMethod = current.PaymentMethod,
DeliveryStatus = (CMSMicroservice.Protobuf.Protos.DeliveryStatus)request.DeliveryStatus,
TrackingCode = request.TrackingCode ?? string.Empty,
DeliveryDescription = request.DeliveryDescription ?? string.Empty
};
await _context.UserOrders.UpdateUserOrderAsync(updateRequest, cancellationToken: cancellationToken);
return Unit.Value;
}

View File

@@ -1,19 +1,14 @@
namespace BackOffice.BFF.Application.UserOrderCQ.Commands.UpdateUserOrder;
public class UpdateUserOrderCommandValidator : AbstractValidator<UpdateUserOrderCommand>
{
public UpdateUserOrderCommandValidator()
{
RuleFor(model => model.Id)
.NotNull();
RuleFor(model => model.Price)
.NotNull();
RuleFor(model => model.PackageId)
.NotNull();
RuleFor(model => model.PaymentStatus)
.NotNull();
RuleFor(model => model.UserId)
.NotNull();
// سایر فیلدها اختیاری هستند (فقط برای به‌روزرسانی وضعیت ارسال)
}
public Func<object, string, Task<IEnumerable<string>>> ValidateValue => async (model, propertyName) =>
{
var result = await ValidateAsync(ValidationContext<UpdateUserOrderCommand>.CreateWithOptions((UpdateUserOrderCommand)model, x => x.IncludeProperties(propertyName)));

View File

@@ -6,7 +6,9 @@ public class GetAllUserOrderByFilterResponseDto
//مدل خروجی
public List<GetAllUserOrderByFilterResponseModel>? Models { get; set; }
}public class GetAllUserOrderByFilterResponseModel
}
public class GetAllUserOrderByFilterResponseModel
{
//شناسه
public long Id { get; set; }
@@ -16,10 +18,24 @@ public class GetAllUserOrderByFilterResponseDto
public long PackageId { get; set; }
//شناسه تراکنش
public long? TransactionId { get; set; }
//وضعیت پرداخت
//وضعیت پرداخت (true برای Success)
public bool PaymentStatus { get; set; }
//تاریخ پرداخت
public DateTime? PaymentDate { get; set; }
//شناسه کاربر
public long UserId { get; set; }
//شناسه آدرس کاربر
public long? UserAddressId { get; set; }
//متن آدرس کاربر
public string? UserAddressText { get; set; }
//وضعیت ارسال (مقدار عددی DeliveryStatus)
public int DeliveryStatus { get; set; }
//کد رهگیری
public string? TrackingCode { get; set; }
//توضیحات ارسال
public string? DeliveryDescription { get; set; }
// نام کامل کاربر
public string? UserFullName { get; set; }
// کدملی کاربر
public string? UserNationalCode { get; set; }
}

View File

@@ -1,4 +1,5 @@
namespace BackOffice.BFF.Application.UserOrderCQ.Queries.GetUserOrder;
public class GetUserOrderResponseDto
{
//شناسه
@@ -9,11 +10,36 @@ public class GetUserOrderResponseDto
public long PackageId { get; set; }
//شناسه تراکنش
public long? TransactionId { get; set; }
//وضعیت پرداخت
//وضعیت پرداخت (true برای Success)
public bool PaymentStatus { get; set; }
//تاریخ پرداخت
public DateTime? PaymentDate { get; set; }
//شناسه کاربر
public long UserId { get; set; }
//شناسه آدرس کاربر
public long? UserAddressId { get; set; }
//متن آدرس کاربر
public string? UserAddressText { get; set; }
//جزئیات فاکتور
public List<GetUserOrderResponseFactorDetail>? FactorDetails { get; set; }
//وضعیت ارسال (مقدار عددی DeliveryStatus)
public int DeliveryStatus { get; set; }
//کد رهگیری
public string? TrackingCode { get; set; }
//توضیحات ارسال
public string? DeliveryDescription { get; set; }
// نام کامل کاربر
public string? UserFullName { get; set; }
// کدملی کاربر
public string? UserNationalCode { get; set; }
}
}
public class GetUserOrderResponseFactorDetail
{
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; }
}