using CMSMicroservice.Protobuf.Protos.DiscountOrder; using Google.Protobuf.WellKnownTypes; namespace BackOffice.BFF.Application.DiscountOrderCQ.Queries.GetAllDiscountOrders; public class GetAllDiscountOrdersQueryHandler : IRequestHandler { private readonly IApplicationContractContext _context; public GetAllDiscountOrdersQueryHandler(IApplicationContractContext context) { _context = context; } public async Task Handle(GetAllDiscountOrdersQuery request, CancellationToken cancellationToken) { var grpcRequest = new GetAllDiscountOrdersRequest { PageNumber = request.PageNumber, PageSize = request.PageSize }; if (request.UserId.HasValue) grpcRequest.UserId = request.UserId.Value; if (request.PaymentStatus.HasValue) grpcRequest.PaymentStatus = request.PaymentStatus.Value; if (request.DeliveryStatus.HasValue) grpcRequest.DeliveryStatus = request.DeliveryStatus.Value; if (!string.IsNullOrWhiteSpace(request.UserMobile)) grpcRequest.UserMobile = request.UserMobile; if (!string.IsNullOrWhiteSpace(request.TrackingCode)) grpcRequest.TrackingCode = request.TrackingCode; if (request.FromDate.HasValue) grpcRequest.FromDate = Timestamp.FromDateTime(DateTime.SpecifyKind(request.FromDate.Value, DateTimeKind.Utc)); if (request.ToDate.HasValue) grpcRequest.ToDate = Timestamp.FromDateTime(DateTime.SpecifyKind(request.ToDate.Value, DateTimeKind.Utc)); if (request.MinAmount.HasValue) grpcRequest.MinAmount = request.MinAmount.Value; if (request.MaxAmount.HasValue) grpcRequest.MaxAmount = request.MaxAmount.Value; var response = await _context.DiscountOrders.GetAllDiscountOrdersAsync(grpcRequest, cancellationToken: cancellationToken); return new GetAllDiscountOrdersResponseDto { MetaData = new MetaData { CurrentPage = response.MetaData.CurrentPage, TotalPage = response.MetaData.TotalPage, PageSize = response.MetaData.PageSize, TotalCount = response.MetaData.TotalCount, HasPrevious = response.MetaData.HasPrevious, HasNext = response.MetaData.HasNext }, Orders = response.Models.Select(o => new AdminOrderDto { Id = o.Id, UserId = o.UserId, UserFullName = o.UserFullName, UserMobile = o.UserMobile, TotalAmount = o.TotalAmount, DiscountBalanceUsed = o.DiscountBalanceUsed, GatewayAmountPaid = o.GatewayAmountPaid, VatAmount = o.VatAmount, PaymentStatus = (int)o.PaymentStatus, PaymentDate = o.PaymentDate?.ToDateTime(), DeliveryStatus = (int)o.DeliveryStatus, DeliveryDate = o.DeliveryDate?.ToDateTime(), ShippingAddress = o.ShippingAddress, ReceiverName = o.ReceiverName, ReceiverMobile = o.ReceiverMobile, TrackingCode = o.TrackingCode, AdminNote = o.AdminNote, Created = o.Created.ToDateTime(), LastModified = o.LastModified?.ToDateTime(), ItemsCount = o.ItemsCount }).ToList() }; } }