From e5bc3a952a4948e9ff2ff8c3e0f2ceb4c724e4a5 Mon Sep 17 00:00:00 2001 From: masoodafar-web Date: Fri, 27 Feb 2026 07:07:30 +0330 Subject: [PATCH] feat: ClubMembershipCycle IHasHistory + PackageId in WalletHistory (F1) - ClubMembershipCycle now implements IHasHistory - CreateHistorySnapshot: New* fields from current state, Old* auto-filled by interceptor - Parses action string to ClubMembershipCycleAction enum - Add PackageId to 6 UserWalletHistory creation sites (F1 fix): - VerifyPackagePurchaseCommandHandler: balanceLog + discountLog (order.PackageId) - CheckAndProcessDayaLoansCommandHandler: mainLog + discountLog (package.Id) - CreateManualPaymentCommandHandler: walletLog (package.Id) - PackageService.CustomerVerifyPackagePurchase: walletLog (purchase.PackageId) - Non-package flows (orders, commissions, manual) correctly keep PackageId=null --- .../CheckAndProcessDayaLoansCommandHandler.cs | 6 +++-- .../CreateManualPaymentCommandHandler.cs | 3 ++- .../VerifyPackagePurchaseCommandHandler.cs | 6 +++-- .../Entities/Club/ClubMembershipCycle.cs | 27 ++++++++++++++++++- .../Services/PackageService.cs | 3 ++- 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/CMSMicroservice.Application/DayaLoanCQ/Commands/CheckAndProcessDayaLoans/CheckAndProcessDayaLoansCommandHandler.cs b/src/CMSMicroservice.Application/DayaLoanCQ/Commands/CheckAndProcessDayaLoans/CheckAndProcessDayaLoansCommandHandler.cs index fb0aa33..68defb2 100644 --- a/src/CMSMicroservice.Application/DayaLoanCQ/Commands/CheckAndProcessDayaLoans/CheckAndProcessDayaLoansCommandHandler.cs +++ b/src/CMSMicroservice.Application/DayaLoanCQ/Commands/CheckAndProcessDayaLoans/CheckAndProcessDayaLoansCommandHandler.cs @@ -231,7 +231,8 @@ public class CheckAndProcessDayaLoansCommandHandler : IRequestHandler /// دوره خرید پکیج — هر بار خرید پکیج ۵۶M یک Cycle جدید ایجاد می‌شود. /// برای حل مشکل overwrite شدن ClubMembership.ActivatedAt در محاسبه کمیسیون. /// -public class ClubMembershipCycle : BaseAuditableEntity +public class ClubMembershipCycle : BaseAuditableEntity, IHasHistory { /// /// شناسه کاربر @@ -74,4 +77,26 @@ public class ClubMembershipCycle : BaseAuditableEntity /// تاریخچه تغییرات دوره (Q27) public virtual ICollection? CycleHistories { get; set; } + + /// + /// ساخت snapshot تاریخچه از وضعیت فعلی چرخه. + /// مقادیر New* از وضعیت فعلی پر می‌شوند. + /// مقادیر Old* توسط HistoryTrackingSaveChangesInterceptor از OriginalValues پر می‌شوند. + /// + public History.ClubMembershipCycleHistory CreateHistorySnapshot(string action, string? performedBy) + { + return new History.ClubMembershipCycleHistory + { + ClubMembershipCycleId = Id, + UserId = UserId, + CycleNumber = CycleNumber, + NewIsCurrentCycle = IsCurrentCycle, + NewMagicStartedAt = MagicStartedAt, + NewMagicCompletedAt = MagicCompletedAt, + Action = Enum.TryParse(action, out var a) + ? a + : ClubMembershipCycleAction.ManualFix, + PerformedBy = performedBy + }; + } } diff --git a/src/CMSMicroservice.WebApi/Services/PackageService.cs b/src/CMSMicroservice.WebApi/Services/PackageService.cs index 0942b26..3ad2be6 100644 --- a/src/CMSMicroservice.WebApi/Services/PackageService.cs +++ b/src/CMSMicroservice.WebApi/Services/PackageService.cs @@ -331,7 +331,8 @@ public class PackageService : PackageContract.PackageContractBase CurrentDiscountBalance = wallet.DiscountBalance, ChangeDiscountValue = discountAmount, IsIncrease = true, - RefrenceId = transaction.Id + RefrenceId = transaction.Id, + PackageId = purchase.PackageId }; _context.UserWalletHistories.Add(walletLog);