refactor(commission): streamline bulk credit payouts handling by removing unused wallet loading and updating payout history logic
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 17m51s

Removed unnecessary loading of user wallets and adjusted payout history creation to reflect accurate amounts before and after payment. Updated comments for clarity.
This commit is contained in:
m-moghaddam
2026-06-20 16:11:37 +03:30
parent 02b2966e96
commit 5f8e30905d
@@ -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<BulkCreditPayouts
public async Task<BulkCreditPayoutsResult> 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<BulkCreditPayouts
return new BulkCreditPayoutsResult { CreditedCount = 0, TotalCredited = 0 };
}
// بارگذاری کیف پول همه کاربران مربوطه (یک query)
var userIds = pendingPayouts.Select(p => 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<UserWalletHistory>();
var payoutHistories = new List<CommissionPayoutHistory>();
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);