Example #1
0
        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());
        }
Example #2
0
        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));
        }