public IActionResult WithdrawRequest([FromBody] WalletWithdrawRequestModel request) { if (!ModelState.IsValid) { return(BadRequest(ErrorResult.GetResult(ModelState))); } if (request.Amount <= 0) { return(BadRequest(ErrorResult.GetResult("Wrong amount"))); } var result = walletService.WithdrawRequest(request, CurrentUser.Id); if (!result.IsSuccess) { return(BadRequest(ErrorResult.GetResult(result))); } return(Ok()); }
public OperationResult WithdrawRequest(WalletWithdrawRequestModel request, Guid userId) { return(InvokeOperations.InvokeOperation(() => { var wallet = context.Wallets.First(w => w.UserId == userId && w.Currency == request.Currency); if (wallet.Amount < request.Amount) { throw new ApplicationException("Not enough funds"); } // TODO wallet relation var transaction = new PaymentTransactions { Id = Guid.NewGuid(), Amount = request.Amount, Type = PaymentTransactionType.Withdrawn, DateCreated = DateTime.UtcNow, DestAddress = request.BlockchainAddress, Status = PaymentTransactionStatus.New }; context.Add(transaction); })); }