public async Task <IActionResult> BalanceTransferToUserAsync(int id, BalanceTransferDto balanceTransfer) { if (GetRole() == Roles.User && !await _accountService.IsOwnerAccountAsync(GetUser(), id)) { return(Forbid()); } if (id == balanceTransfer.AccountIdTarget) { return(Conflict("The destination account must be different")); } balanceTransfer.AccountId = id; var result = await _accountTransactionService.BalanceTransferToUserAsync(balanceTransfer); return(result ? (IActionResult)Ok() : NotFound()); }
public async Task <bool> BalanceTransferToUserAsync(BalanceTransferDto balanceTransfer) { var targetUser = await BalanceManagementDbContext.Users.AsNoTracking().FirstOrDefaultAsync(f => f.UserName == balanceTransfer.UserTarget); var sourceUser = await BalanceManagementDbContext.Accounts.AsNoTracking() .Where(w => w.Id == balanceTransfer.AccountId).Select(s => s.User).FirstOrDefaultAsync(); await ModifyBalanceAsync(new ModifyBalanceDto { AccountId = balanceTransfer.AccountId, Amount = -balanceTransfer.Amount, Description = $"Transfer to user: {balanceTransfer.UserTarget}", UserId = sourceUser.Id }); await ModifyBalanceAsync(new ModifyBalanceDto { AccountId = balanceTransfer.AccountIdTarget, Amount = balanceTransfer.Amount, Description = $"Transfer from user: {sourceUser.UserName}", UserId = targetUser.Id }); return(await Task.FromResult(true)); }