From 5f8e30905d2dca70ec76604bd426e15e0efbb94d Mon Sep 17 00:00:00 2001 From: m-moghaddam Date: Sat, 20 Jun 2026 16:11:37 +0330 Subject: [PATCH] refactor(commission): streamline bulk credit payouts handling by removing unused wallet loading and updating payout history logic Removed unnecessary loading of user wallets and adjusted payout history creation to reflect accurate amounts before and after payment. Updated comments for clarity. --- .../BulkCreditPayoutsCommandHandler.cs | 43 ++----------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/src/CMSMicroservice.Application/CommissionCQ/Commands/BulkCreditPayouts/BulkCreditPayoutsCommandHandler.cs b/src/CMSMicroservice.Application/CommissionCQ/Commands/BulkCreditPayouts/BulkCreditPayoutsCommandHandler.cs index 6d1e840..a968c57 100644 --- a/src/CMSMicroservice.Application/CommissionCQ/Commands/BulkCreditPayouts/BulkCreditPayoutsCommandHandler.cs +++ b/src/CMSMicroservice.Application/CommissionCQ/Commands/BulkCreditPayouts/BulkCreditPayoutsCommandHandler.cs @@ -1,5 +1,4 @@ using CMSMicroservice.Application.Common.Interfaces; -using CMSMicroservice.Domain.Entities; using CMSMicroservice.Domain.Entities.Commission; using CMSMicroservice.Domain.Entities.History; using CMSMicroservice.Domain.Enums; @@ -25,7 +24,6 @@ public class BulkCreditPayoutsCommandHandler : IRequestHandler Handle(BulkCreditPayoutsCommand request, CancellationToken cancellationToken) { - // بارگذاری همه پرداخت‌های Pending این هفته var pendingPayouts = await _context.UserCommissionPayouts .Where(p => p.WeekDefinitionId == request.WeekDefinitionId && p.Status == CommissionPayoutStatus.Pending @@ -37,72 +35,37 @@ public class BulkCreditPayoutsCommandHandler : IRequestHandler p.UserId).Distinct().ToList(); - var wallets = await _context.UserWallets - .Where(w => userIds.Contains(w.UserId) && !w.IsDeleted) - .ToDictionaryAsync(w => w.UserId, cancellationToken); - var performedBy = _currentUser.GetPerformedBy() ?? "System"; var now = DateTime.UtcNow; - var walletHistories = new List(); var payoutHistories = new List(); var creditedCount = 0; long totalCredited = 0; foreach (var payout in pendingPayouts) { - if (!wallets.TryGetValue(payout.UserId, out var wallet)) - { - _logger.LogWarning( - "Wallet not found for UserId={UserId}, PayoutId={PayoutId} — skipping", - payout.UserId, payout.Id); - continue; - } - - var oldBalance = wallet.Balance; - - // واریز مبلغ به کیف پول - wallet.Balance += payout.TotalAmount; - - walletHistories.Add(new UserWalletHistory - { - WalletId = wallet.Id, - CurrentBalance = wallet.Balance, - CurrentNetworkBalance = wallet.NetworkBalance, - CurrentDiscountBalance = wallet.DiscountBalance, - ChangeValue = payout.TotalAmount, - ChangeNerworkValue = 0, - ChangeDiscountValue = 0, - IsIncrease = true, - RefrenceId = payout.Id - }); - - // به‌روزرسانی وضعیت پرداخت payout.Status = CommissionPayoutStatus.Paid; payout.PaidAt = now; payout.LastModified = now; payoutHistories.Add(new CommissionPayoutHistory { - UserCommissionPayoutId = payout.Id, + UserCommissionPayoutId = payout.Id, UserId = payout.UserId, WeekDefinitionId = payout.WeekDefinitionId, - AmountBefore = 0, + AmountBefore = payout.TotalAmount, AmountAfter = payout.TotalAmount, OldStatus = CommissionPayoutStatus.Pending, NewStatus = CommissionPayoutStatus.Paid, Action = CommissionPayoutAction.Paid, PerformedBy = performedBy, - Reason = $"واریز دسته‌جمعی کمیسیون هفته {payout.WeekDefinitionId} توسط {performedBy}" + Reason = $"تایید پرداخت دسته‌جمعی کمیسیون هفته {payout.WeekDefinitionId} توسط {performedBy}" }); creditedCount++; totalCredited += payout.TotalAmount; } - await _context.UserWalletHistories.AddRangeAsync(walletHistories, cancellationToken); await _context.CommissionPayoutHistories.AddRangeAsync(payoutHistories, cancellationToken); await _context.SaveChangesAsync(cancellationToken);