diff --git a/src/CMSMicroservice.Application/Common/Mappings/UserOrderProfile.cs b/src/CMSMicroservice.Application/Common/Mappings/UserOrderProfile.cs index a56c965..6940d65 100644 --- a/src/CMSMicroservice.Application/Common/Mappings/UserOrderProfile.cs +++ b/src/CMSMicroservice.Application/Common/Mappings/UserOrderProfile.cs @@ -1,10 +1,58 @@ +using CMSMicroservice.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter; +using CMSMicroservice.Application.UserOrderCQ.Queries.GetUserOrder; + namespace CMSMicroservice.Application.Common.Mappings; public class UserOrderProfile : IRegister { void IRegister.Register(TypeAdapterConfig config) { - // config.NewConfig() - // .Map(dest => dest.FullName, src => $"{src.Firstname} {src.Lastname}"); + config.NewConfig() + .Map(dest => dest.Id, src => src.Id) + .Map(dest => dest.Amount, src => src.Amount) + .Map(dest => dest.PackageId, src => src.PackageId) + .Map(dest => dest.TransactionId, src => src.TransactionId) + .Map(dest => dest.PaymentStatus, src => src.PaymentStatus) + .Map(dest => dest.PaymentDate, src => src.PaymentDate) + .Map(dest => dest.UserId, src => src.UserId) + .Map(dest => dest.UserAddressId, src => src.UserAddressId) + .Map(dest => dest.PaymentMethod, src => src.PaymentMethod) + .Map(dest => dest.UserAddressText, src => src.UserAddress.Address) + .Map(dest => dest.FactorDetails, src => src.FactorDetailss.Select(s=>s.Adapt())) + + ; + + config.NewConfig() + .Map(dest => dest.Id, src => src.Id) + .Map(dest => dest.Amount, src => src.Amount) + .Map(dest => dest.PackageId, src => src.PackageId) + .Map(dest => dest.TransactionId, src => src.TransactionId) + .Map(dest => dest.PaymentStatus, src => src.PaymentStatus) + .Map(dest => dest.PaymentDate, src => src.PaymentDate) + .Map(dest => dest.UserId, src => src.UserId) + .Map(dest => dest.UserAddressId, src => src.UserAddressId) + .Map(dest => dest.PaymentMethod, src => src.PaymentMethod) + .Map(dest => dest.UserAddressText, src => src.UserAddress.Address) + .Map(dest => dest.FactorDetails, src => src.FactorDetailss.Select(s=>s.Adapt())) + ; + + config.NewConfig() + .Map(dest => dest.ProductId, src => src.ProductId) + .Map(dest => dest.ProductTitle, src => src.Product.Title) + .Map(dest => dest.ProductThumbnailPath, src => src.Product.ThumbnailPath) + .Map(dest => dest.UnitPrice, src => src.Product.Price) + .Map(dest => dest.Count, src => src.Count) + .Map(dest => dest.UnitDiscountPrice, src => src.Product.Price*(src.Product.Discount/100)) + ; + + config.NewConfig() + .Map(dest => dest.ProductId, src => src.ProductId) + .Map(dest => dest.ProductTitle, src => src.Product.Title) + .Map(dest => dest.ProductThumbnailPath, src => src.Product.ThumbnailPath) + .Map(dest => dest.UnitPrice, src => src.Product.Price) + .Map(dest => dest.Count, src => src.Count) + .Map(dest => dest.UnitDiscountPrice, src => src.Product.Price*(src.Product.Discount/100)) + ; + } } diff --git a/src/CMSMicroservice.Application/OtpTokenCQ/Commands/VerifyOtpToken/VerifyOtpTokenCommandHandler.cs b/src/CMSMicroservice.Application/OtpTokenCQ/Commands/VerifyOtpToken/VerifyOtpTokenCommandHandler.cs index 10e7a61..99c1161 100644 --- a/src/CMSMicroservice.Application/OtpTokenCQ/Commands/VerifyOtpToken/VerifyOtpTokenCommandHandler.cs +++ b/src/CMSMicroservice.Application/OtpTokenCQ/Commands/VerifyOtpToken/VerifyOtpTokenCommandHandler.cs @@ -1,6 +1,8 @@ using CMSMicroservice.Domain.Events; using Microsoft.Extensions.Configuration; + namespace CMSMicroservice.Application.OtpTokenCQ.Commands.VerifyOtpToken; + public class VerifyOtpTokenCommandHandler : IRequestHandler { private readonly IApplicationDbContext _context; @@ -14,8 +16,10 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler Handle(VerifyOtpTokenCommand request, CancellationToken cancellationToken) + const int MaxAttempts = 5; // محدودیت تلاش + + public async Task Handle(VerifyOtpTokenCommand request, + CancellationToken cancellationToken) { var mobile = request.Mobile.NormalizeIranMobile(); var purpose = request.Purpose?.ToLowerInvariant() ?? "signup"; @@ -26,9 +30,12 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler o.Created) .FirstOrDefaultAsync(cancellationToken); - if (otp is null) return new VerifyOtpTokenResponseDto() { Success = false, Message = "کد پیدا نشد یا منقضی شده است." }; + if (otp is null) + return new VerifyOtpTokenResponseDto() { Success = false, Message = "کد پیدا نشد یا منقضی شده است." }; - if (otp.Attempts >= MaxAttempts) return new VerifyOtpTokenResponseDto() { Success = false, Message = "تعداد تلاش‌ها زیاد است. دوباره کد بگیرید." }; + if (otp.Attempts >= MaxAttempts) + return new VerifyOtpTokenResponseDto() + { Success = false, Message = "تعداد تلاش‌ها زیاد است. دوباره کد بگیرید." }; otp.Attempts++; @@ -50,7 +57,8 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler u.ReferralCode == request.ParentReferralCode, cancellationToken: cancellationToken); + var parent = await _context.Users.FirstOrDefaultAsync(u => u.ReferralCode == request.ParentReferralCode, + cancellationToken: cancellationToken); if (parent == null) return new VerifyOtpTokenResponseDto() { Success = false, Message = "معرف وجود ندارد." }; @@ -70,13 +78,24 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler f.IsDefault).Address, - PaymentDate = newOrder.PaymentDate, - FactorDetails = factorDetailsList.Select(s => new SubmitShopBuyOrderFactorDetail() - { - Count = s.Count, - UnitPrice = s.UnitPrice, - ProductId = s.ProductId, - ProductThumbnailPath = user.UserCartss.First(f => f.ProductId == s.ProductId).Product.ThumbnailPath, - ProductTitle = user.UserCartss.First(f => f.ProductId == s.ProductId).Product.Title, - UnitDiscountPrice = 0, - }).ToList() + }; - user.UserCartss.Clear(); - await _context.SaveChangesAsync(cancellationToken); return finalResult; } } \ No newline at end of file diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetAllUserOrderByFilter/GetAllUserOrderByFilterResponseDto.cs b/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetAllUserOrderByFilter/GetAllUserOrderByFilterResponseDto.cs index 361b29c..69f3f6d 100644 --- a/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetAllUserOrderByFilter/GetAllUserOrderByFilterResponseDto.cs +++ b/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetAllUserOrderByFilter/GetAllUserOrderByFilterResponseDto.cs @@ -1,3 +1,5 @@ +using CMSMicroservice.Domain.Enums; + namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter; public class GetAllUserOrderByFilterResponseDto { diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetUserOrder/GetUserOrderQueryHandler.cs b/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetUserOrder/GetUserOrderQueryHandler.cs index ef029d9..d39c01f 100644 --- a/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetUserOrder/GetUserOrderQueryHandler.cs +++ b/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetUserOrder/GetUserOrderQueryHandler.cs @@ -12,6 +12,9 @@ public class GetUserOrderQueryHandler : IRequestHandler i.UserAddress) + .Include(i => i.FactorDetailss) + .AsNoTracking() .Where(x => x.Id == request.Id) .ProjectToType() diff --git a/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetUserOrder/GetUserOrderResponseDto.cs b/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetUserOrder/GetUserOrderResponseDto.cs index 934d502..b78e0bc 100644 --- a/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetUserOrder/GetUserOrderResponseDto.cs +++ b/src/CMSMicroservice.Application/UserOrderCQ/Queries/GetUserOrder/GetUserOrderResponseDto.cs @@ -1,3 +1,5 @@ +using CMSMicroservice.Domain.Enums; + namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetUserOrder; public class GetUserOrderResponseDto { diff --git a/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj b/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj index b7aaec7..61b5d4a 100644 --- a/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj +++ b/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj @@ -3,7 +3,7 @@ net9.0 enable enable - 0.0.127 + 0.0.128 None False False