💄 Optimize the transfer
This commit is contained in:
		| @@ -441,6 +441,23 @@ public class PaymentService( | ||||
|  | ||||
|         // Calculate transfer fee (5%) | ||||
|         decimal fee = Math.Round(amount * 0.05m, 2); | ||||
|         decimal finalCost = amount + fee; | ||||
|  | ||||
|         // Make sure the account has sufficient balanace for both fee and the transfer | ||||
|         var (payerPocket, isNewlyCreated) = | ||||
|             await wat.GetOrCreateWalletPocketAsync(payerWallet.Id, currency, amount); | ||||
|  | ||||
|         if (isNewlyCreated || payerPocket.Amount < finalCost) | ||||
|             throw new InvalidOperationException("Insufficient funds"); | ||||
|  | ||||
|         // Create main transfer transaction | ||||
|         var transaction = await CreateTransactionAsync( | ||||
|             payerWallet.Id, | ||||
|             payeeWallet.Id, | ||||
|             currency, | ||||
|             amount, | ||||
|             $"Transfer from account {payerAccountId} to {payeeAccountId}", | ||||
|             Shared.Models.TransactionType.Transfer); | ||||
|  | ||||
|         // Create fee transaction (to system) | ||||
|         await CreateTransactionAsync( | ||||
| @@ -448,17 +465,10 @@ public class PaymentService( | ||||
|             null, | ||||
|             currency, | ||||
|             fee, | ||||
|             $"Transfer fee for transfer from account {payerAccountId} to {payeeAccountId}", | ||||
|             $"Transfer fee for transaction #{transaction.Id}", | ||||
|             Shared.Models.TransactionType.System); | ||||
|  | ||||
|         // Create main transfer transaction | ||||
|         return await CreateTransactionAsync( | ||||
|             payerWallet.Id, | ||||
|             payeeWallet.Id, | ||||
|             currency, | ||||
|             amount, | ||||
|             $"Transfer from account {payerAccountId} to {payeeAccountId}", | ||||
|             Shared.Models.TransactionType.Transfer); | ||||
|         return transaction; | ||||
|     } | ||||
|  | ||||
|     public async Task<SnWalletFund> CreateFundAsync( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user