🐛 Tried to fix fund claim cocurrency issue
This commit is contained in:
@@ -609,6 +609,12 @@ public class PaymentService(
|
||||
|
||||
public async Task<SnWalletTransaction> ReceiveFundAsync(Guid recipientAccountId, Guid fundId)
|
||||
{
|
||||
// Use a transaction to ensure atomicity
|
||||
await using var transactionScope = await db.Database.BeginTransactionAsync();
|
||||
|
||||
try
|
||||
{
|
||||
// Load fund with proper locking to prevent concurrent modifications
|
||||
var fund = await db.WalletFunds
|
||||
.Include(f => f.Recipients)
|
||||
.FirstOrDefaultAsync(f => f.Id == fundId);
|
||||
@@ -668,7 +674,7 @@ public class PaymentService(
|
||||
throw new InvalidOperationException("Recipient wallet not found");
|
||||
|
||||
// Create transaction to transfer funds to recipient
|
||||
var transaction = await CreateTransactionAsync(
|
||||
var walletTransaction = await CreateTransactionAsync(
|
||||
payerWalletId: null, // System transfer
|
||||
payeeWalletId: recipientWallet.Id,
|
||||
currency: fund.Currency,
|
||||
@@ -700,8 +706,15 @@ public class PaymentService(
|
||||
}
|
||||
|
||||
await db.SaveChangesAsync();
|
||||
await transactionScope.CommitAsync();
|
||||
|
||||
return transaction;
|
||||
return walletTransaction;
|
||||
}
|
||||
catch
|
||||
{
|
||||
await transactionScope.RollbackAsync();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task ProcessExpiredFundsAsync()
|
||||
|
||||
Reference in New Issue
Block a user