diff --git a/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/ProcessManualMembershipPayment/ProcessManualMembershipPaymentCommand.cs b/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/ProcessManualMembershipPayment/ProcessManualMembershipPaymentCommand.cs index fa553d3..4a337b7 100644 --- a/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/ProcessManualMembershipPayment/ProcessManualMembershipPaymentCommand.cs +++ b/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/ProcessManualMembershipPayment/ProcessManualMembershipPaymentCommand.cs @@ -21,9 +21,4 @@ public record ProcessManualMembershipPaymentCommand : IRequest public string? Description { get; init; } - - /// - /// شناسه ادمین ثبت کننده - /// - public long AdminUserId { get; init; } } diff --git a/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/ProcessManualMembershipPayment/ProcessManualMembershipPaymentCommandHandler.cs b/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/ProcessManualMembershipPayment/ProcessManualMembershipPaymentCommandHandler.cs index 912ba65..e36f50a 100644 --- a/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/ProcessManualMembershipPayment/ProcessManualMembershipPaymentCommandHandler.cs +++ b/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/ProcessManualMembershipPayment/ProcessManualMembershipPaymentCommandHandler.cs @@ -1,6 +1,7 @@ using CMSMicroservice.Application.Common.Exceptions; using CMSMicroservice.Application.Common.Interfaces; using CMSMicroservice.Domain.Entities; +using CMSMicroservice.Domain.Entities.Payment; using CMSMicroservice.Domain.Enums; using Microsoft.EntityFrameworkCore; @@ -9,13 +10,16 @@ namespace CMSMicroservice.Application.ManualPaymentCQ.Commands.ProcessManualMemb public class ProcessManualMembershipPaymentCommandHandler : IRequestHandler { private readonly IApplicationDbContext _context; + private readonly ICurrentUserService _currentUser; private readonly ILogger _logger; public ProcessManualMembershipPaymentCommandHandler( IApplicationDbContext context, + ICurrentUserService currentUser, ILogger logger) { _context = context; + _currentUser = currentUser; _logger = logger; } @@ -29,7 +33,19 @@ public class ProcessManualMembershipPaymentCommandHandler : IRequestHandler u.Id == request.UserId, cancellationToken); @@ -39,45 +55,38 @@ public class ProcessManualMembershipPaymentCommandHandler : IRequestHandler u.Id == request.AdminUserId, cancellationToken); - - if (admin == null) + // 3. ایجاد ManualPayment با وضعیت Approved + var manualPayment = new ManualPayment { - _logger.LogError("Admin user not found: {AdminUserId}", request.AdminUserId); - throw new NotFoundException($"ادمین با شناسه {request.AdminUserId} یافت نشد"); - } + UserId = request.UserId, + Amount = request.Amount, + Type = ManualPaymentType.CashDeposit, + Description = request.Description ?? "پرداخت دستی عضویت", + ReferenceNumber = request.ReferenceNumber, + Status = ManualPaymentStatus.Approved, + RequestedBy = adminUserId, + ApprovedBy = adminUserId, + ApprovedAt = DateTime.Now + }; - // 3. پیدا کردن یا ایجاد کیف پول + _context.ManualPayments.Add(manualPayment); + await _context.SaveChangesAsync(cancellationToken); + + // 4. پیدا کردن یا ایجاد کیف پول var wallet = await _context.UserWallets .FirstOrDefaultAsync(w => w.UserId == request.UserId, cancellationToken); if (wallet == null) { - wallet = new UserWallet - { - UserId = request.UserId, - Balance = 0, - NetworkBalance = 0, - DiscountBalance = 0 - }; - await _context.UserWallets.AddAsync(wallet, cancellationToken); - await _context.SaveChangesAsync(cancellationToken); + _logger.LogError("Wallet not found for UserId: {UserId}", request.UserId); + throw new NotFoundException($"کیف پول کاربر {request.UserId} یافت نشد"); } - // 4. افزودن به Balance و DiscountBalance - var oldBalance = wallet.Balance; - var oldDiscountBalance = wallet.DiscountBalance; - - wallet.Balance += request.Amount; - wallet.DiscountBalance += request.Amount; - - // 5. ثبت تراکنش + // 6. ثبت تراکنش var transaction = new Transaction { Amount = request.Amount, - Description = $"پرداخت دستی عضویت - {request.Description ?? "بدون توضیحات"} - مرجع: {request.ReferenceNumber}", + Description = $"پرداخت دستی عضویت - {manualPayment.Description} - مرجع: {request.ReferenceNumber}", PaymentStatus = PaymentStatus.Success, PaymentDate = DateTime.Now, RefId = request.ReferenceNumber, @@ -87,7 +96,14 @@ public class ProcessManualMembershipPaymentCommandHandler : IRequestHandler a.UserId == request.UserId) .OrderByDescending(a => a.IsDefault) @@ -139,7 +145,7 @@ public class ProcessManualMembershipPaymentCommandHandler : IRequestHandler x.AdminUserId) - .GreaterThan(0) - .WithMessage("شناسه ادمین معتبر نیست"); } } diff --git a/src/CMSMicroservice.Protobuf/Protos/manualpayment.proto b/src/CMSMicroservice.Protobuf/Protos/manualpayment.proto index 715abe6..a53a107 100644 --- a/src/CMSMicroservice.Protobuf/Protos/manualpayment.proto +++ b/src/CMSMicroservice.Protobuf/Protos/manualpayment.proto @@ -141,7 +141,6 @@ message ProcessManualMembershipPaymentRequest int64 amount = 2; string reference_number = 3; google.protobuf.StringValue description = 4; - int64 admin_user_id = 5; } message ProcessManualMembershipPaymentResponse diff --git a/src/CMSMicroservice.WebApi/Services/ManualPaymentService.cs b/src/CMSMicroservice.WebApi/Services/ManualPaymentService.cs index 1375ea6..098f065 100644 --- a/src/CMSMicroservice.WebApi/Services/ManualPaymentService.cs +++ b/src/CMSMicroservice.WebApi/Services/ManualPaymentService.cs @@ -67,8 +67,7 @@ public class ManualPaymentService : ManualPaymentContract.ManualPaymentContractB UserId = request.UserId, Amount = request.Amount, ReferenceNumber = request.ReferenceNumber, - Description = request.Description, - AdminUserId = request.AdminUserId + Description = request.Description }; var result = await _sender.Send(command, context.CancellationToken);