From 469d97bb60239dfaba1692eec8f9f376c021a5b1 Mon Sep 17 00:00:00 2001 From: masoodafar-web Date: Thu, 26 Feb 2026 02:01:33 +0330 Subject: [PATCH] Phase 7a: Cosmetic cleanup + delete orphaned PurchasePackage handler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Delete orphaned PurchasePackageCommand handler (no RPC dispatch, no callers) - Fix doc-comments: طلایی → پکیج in enums, entities, handlers - Remove stale 56M inline comments - Clean SystemConstants deprecated field docs --- .../CheckAndProcessDayaLoansCommandHandler.cs | 2 +- .../CreateManualPaymentCommandHandler.cs | 4 +- .../PurchasePackage/PurchasePackageCommand.cs | 18 -- .../PurchasePackageCommandHandler.cs | 164 ------------------ .../PurchasePackageCommandValidator.cs | 13 -- .../Common/SystemConstants.cs | 4 +- src/CMSMicroservice.Domain/Entities/User.cs | 2 +- .../Entities/UserWallet.cs | 2 +- .../Enums/CommissionPayoutStatus.cs | 2 +- .../Enums/PackagePurchaseMethod.cs | 2 +- 10 files changed, 9 insertions(+), 204 deletions(-) delete mode 100644 src/CMSMicroservice.Application/PackageCQ/Commands/PurchasePackage/PurchasePackageCommand.cs delete mode 100644 src/CMSMicroservice.Application/PackageCQ/Commands/PurchasePackage/PurchasePackageCommandHandler.cs delete mode 100644 src/CMSMicroservice.Application/PackageCQ/Commands/PurchasePackage/PurchasePackageCommandValidator.cs diff --git a/src/CMSMicroservice.Application/DayaLoanCQ/Commands/CheckAndProcessDayaLoans/CheckAndProcessDayaLoansCommandHandler.cs b/src/CMSMicroservice.Application/DayaLoanCQ/Commands/CheckAndProcessDayaLoans/CheckAndProcessDayaLoansCommandHandler.cs index c4e1690..93d494a 100644 --- a/src/CMSMicroservice.Application/DayaLoanCQ/Commands/CheckAndProcessDayaLoans/CheckAndProcessDayaLoansCommandHandler.cs +++ b/src/CMSMicroservice.Application/DayaLoanCQ/Commands/CheckAndProcessDayaLoans/CheckAndProcessDayaLoansCommandHandler.cs @@ -12,7 +12,7 @@ namespace CMSMicroservice.Application.DayaLoanCQ.Commands.CheckAndProcessDayaLoa /// 1. استعلام از API دایا /// 2. ذخیره/به‌روزرسانی DayaLoanContract /// 3. شارژ کیف پول برای وام‌های تأیید شده -/// 4. ثبت Order پکیج طلایی +/// 4. ثبت Order پکیج /// 5. ارسال SMS /// public class CheckAndProcessDayaLoansCommandHandler : IRequestHandler diff --git a/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/CreateManualPayment/CreateManualPaymentCommandHandler.cs b/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/CreateManualPayment/CreateManualPaymentCommandHandler.cs index 9402612..b2c57ce 100644 --- a/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/CreateManualPayment/CreateManualPaymentCommandHandler.cs +++ b/src/CMSMicroservice.Application/ManualPaymentCQ/Commands/CreateManualPayment/CreateManualPaymentCommandHandler.cs @@ -116,8 +116,8 @@ public class CreateManualPaymentCommandHandler : IRequestHandler -/// دستور خرید پکیج از طریق درگاه بانکی -/// -public class PurchasePackageCommand : IRequest -{ - /// - /// شناسه کاربر - /// - public long UserId { get; set; } -} diff --git a/src/CMSMicroservice.Application/PackageCQ/Commands/PurchasePackage/PurchasePackageCommandHandler.cs b/src/CMSMicroservice.Application/PackageCQ/Commands/PurchasePackage/PurchasePackageCommandHandler.cs deleted file mode 100644 index 3427031..0000000 --- a/src/CMSMicroservice.Application/PackageCQ/Commands/PurchasePackage/PurchasePackageCommandHandler.cs +++ /dev/null @@ -1,164 +0,0 @@ -using CMSMicroservice.Application.Common.Exceptions; -using CMSMicroservice.Application.Common.Interfaces; -using CMSMicroservice.Application.Common.Models; -using CMSMicroservice.Domain.Entities; -using CMSMicroservice.Domain.Enums; -using MediatR; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; -using ValidationException = FluentValidation.ValidationException; - -namespace CMSMicroservice.Application.PackageCQ.Commands.PurchasePackage; - -public class PurchasePackageCommandHandler - : IRequestHandler -{ - private readonly IApplicationDbContext _context; - private readonly IPaymentGatewayService _paymentGateway; - private readonly IConfiguration _configuration; - private readonly ILogger _logger; - - public PurchasePackageCommandHandler( - IApplicationDbContext context, - IPaymentGatewayService paymentGateway, - IConfiguration configuration, - ILogger logger) - { - _context = context; - _paymentGateway = paymentGateway; - _configuration = configuration; - _logger = logger; - } - - public async Task Handle( - PurchasePackageCommand request, - CancellationToken cancellationToken) - { - try - { - _logger.LogInformation( - "Starting package purchase for UserId: {UserId}", - request.UserId - ); - - // 1. بررسی وجود کاربر - var user = await _context.Users - .FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken); - - if (user == null) - { - _logger.LogWarning("User not found: {UserId}", request.UserId); - throw new NotFoundException(nameof(User), request.UserId); - } - - // 2. بررسی اینکه قبلاً پکیج نخریده باشد - if (user.PackagePurchaseMethod != PackagePurchaseMethod.None) - { - _logger.LogWarning( - "User {UserId} has already purchased package via {Method}", - request.UserId, - user.PackagePurchaseMethod - ); - throw new ValidationException( - "شما قبلاً پکیج را خریداری کرده‌اید" - ); - } - - // 3. پیدا کردن پکیج (فعلاً پکیج طلایی) - var goldenPackage = await _context.Packages - .FirstOrDefaultAsync( - p => p.Title.Contains("طلایی") || p.Title.Contains("Golden"), - cancellationToken - ); - - if (goldenPackage == null) - { - _logger.LogError("Package not found in database"); - throw new NotFoundException("پکیج یافت نشد"); - } - - // 4. پیدا کردن آدرس پیش‌فرض کاربر (برای فیلد اجباری) - var defaultAddress = await _context.UserAddresses - .Where(a => a.UserId == request.UserId) - .OrderByDescending(a => a.Created) - .FirstOrDefaultAsync(cancellationToken); - - if (defaultAddress == null) - { - _logger.LogWarning("No address found for user {UserId}", request.UserId); - throw new ValidationException( - "لطفاً ابتدا یک آدرس برای خود ثبت کنید" - ); - } - - // 5. ایجاد سفارش - var order = new UserOrder - { - UserId = user.Id, - PackageId = goldenPackage.Id, - Amount = goldenPackage.Price, // 56,000,000 تومان - PaymentStatus = PaymentStatus.Pending, - DeliveryStatus = DeliveryStatus.None, - UserAddressId = defaultAddress.Id, - PaymentMethod = PaymentMethod.IPG - }; - - _context.UserOrders.Add(order); - await _context.SaveChangesAsync(cancellationToken); - - _logger.LogInformation( - "Created UserOrder {OrderId} for UserId {UserId}, Amount: {Amount}", - order.Id, - request.UserId, - order.Amount - ); - - // 6. ایجاد درخواست پرداخت از درگاه - var paymentRequest = new PaymentRequest - { - Amount = order.Amount, - UserId = user.Id, - Mobile = user.Mobile ?? "", - CallbackUrl = $"{_configuration["CmsBaseUrl"] ?? "https://localhost:32846"}/api/package/verify-package", - Description = $"خرید پکیج - سفارش #{order.Id}" - }; - - var paymentResult = await _paymentGateway.InitiatePaymentAsync(paymentRequest); - - if (!paymentResult.IsSuccess) - { - _logger.LogError( - "Payment gateway failed for OrderId {OrderId}: {ErrorMessage}", - order.Id, - paymentResult.ErrorMessage - ); - - // به‌روزرسانی وضعیت سفارش - order.PaymentStatus = PaymentStatus.Reject; - await _context.SaveChangesAsync(cancellationToken); - - throw new Exception( - $"خطا در ارتباط با درگاه پرداخت: {paymentResult.ErrorMessage}" - ); - } - - _logger.LogInformation( - "Payment initiated successfully. OrderId: {OrderId}, RefId: {RefId}", - order.Id, - paymentResult.RefId - ); - - return paymentResult; - } - catch (Exception ex) - { - _logger.LogError( - ex, - "Error in PurchasePackageCommand for UserId: {UserId}", - request.UserId - ); - throw; - } - } -} diff --git a/src/CMSMicroservice.Application/PackageCQ/Commands/PurchasePackage/PurchasePackageCommandValidator.cs b/src/CMSMicroservice.Application/PackageCQ/Commands/PurchasePackage/PurchasePackageCommandValidator.cs deleted file mode 100644 index 002c022..0000000 --- a/src/CMSMicroservice.Application/PackageCQ/Commands/PurchasePackage/PurchasePackageCommandValidator.cs +++ /dev/null @@ -1,13 +0,0 @@ -using FluentValidation; - -namespace CMSMicroservice.Application.PackageCQ.Commands.PurchasePackage; - -public class PurchasePackageCommandValidator : AbstractValidator -{ - public PurchasePackageCommandValidator() - { - RuleFor(x => x.UserId) - .GreaterThan(0) - .WithMessage("شناسه کاربر باید بزرگتر از صفر باشد"); - } -} diff --git a/src/CMSMicroservice.Domain/Common/SystemConstants.cs b/src/CMSMicroservice.Domain/Common/SystemConstants.cs index cc06ffa..e424383 100644 --- a/src/CMSMicroservice.Domain/Common/SystemConstants.cs +++ b/src/CMSMicroservice.Domain/Common/SystemConstants.cs @@ -41,14 +41,14 @@ public static class SystemConstants #region Package Settings /// - /// مبلغ پکیج طلایی / پایه (ریال) - 56 میلیون تومان + /// مبلغ پکیج پایه (ریال) /// [DEPRECATED] از Package.Price استفاده کنید /// [Obsolete("Moved to Package.Price. Read from Package entity instead.")] public const long BasePackageAmount = 56_000_000; /// - /// مبلغ وام دایا (ریال) - همان مبلغ پکیج طلایی + /// مبلغ وام دایا (ریال) /// [DEPRECATED] از Package.Price استفاده کنید /// [Obsolete("Moved to Package.Price. Read from Package entity with SupportsDayaPurchase=true.")] diff --git a/src/CMSMicroservice.Domain/Entities/User.cs b/src/CMSMicroservice.Domain/Entities/User.cs index 3ceb0fd..1f1a7de 100644 --- a/src/CMSMicroservice.Domain/Entities/User.cs +++ b/src/CMSMicroservice.Domain/Entities/User.cs @@ -63,7 +63,7 @@ public class User : BaseAuditableEntity public DateTime? DayaCreditReceivedAt { get; set; } /// - /// نحوه خرید پکیج طلایی (برای جلوگیری از خرید مجدد) + /// نحوه خرید پکیج (برای جلوگیری از خرید مجدد) /// public PackagePurchaseMethod PackagePurchaseMethod { get; set; } = PackagePurchaseMethod.None; diff --git a/src/CMSMicroservice.Domain/Entities/UserWallet.cs b/src/CMSMicroservice.Domain/Entities/UserWallet.cs index a3c1e27..ce14154 100644 --- a/src/CMSMicroservice.Domain/Entities/UserWallet.cs +++ b/src/CMSMicroservice.Domain/Entities/UserWallet.cs @@ -10,7 +10,7 @@ public class UserWallet : BaseAuditableEntity public long Balance { get; set; } /// - /// موجودی شبکه/کارمزد (کیف پول طلایی) - قابل برداشت نقدی یا خرید الماس + /// موجودی شبکه/کارمزد — قابل برداشت نقدی یا خرید الماس /// public long NetworkBalance { get; set; } diff --git a/src/CMSMicroservice.Domain/Enums/CommissionPayoutStatus.cs b/src/CMSMicroservice.Domain/Enums/CommissionPayoutStatus.cs index 63868a0..e345134 100644 --- a/src/CMSMicroservice.Domain/Enums/CommissionPayoutStatus.cs +++ b/src/CMSMicroservice.Domain/Enums/CommissionPayoutStatus.cs @@ -11,7 +11,7 @@ public enum CommissionPayoutStatus Pending = 0, /// - /// واریز شده به کیف پول طلایی + /// واریز شده به کیف پول /// Paid = 1, diff --git a/src/CMSMicroservice.Domain/Enums/PackagePurchaseMethod.cs b/src/CMSMicroservice.Domain/Enums/PackagePurchaseMethod.cs index 3d7dbce..8ff177f 100644 --- a/src/CMSMicroservice.Domain/Enums/PackagePurchaseMethod.cs +++ b/src/CMSMicroservice.Domain/Enums/PackagePurchaseMethod.cs @@ -1,7 +1,7 @@ namespace CMSMicroservice.Domain.Enums; /// -/// نحوه خرید پکیج طلایی توسط کاربر +/// نحوه خرید پکیج توسط کاربر /// public enum PackagePurchaseMethod {