public async ValueTask <ActionResult <AccountOutputModel> > AddAccount(AccountInputModel accountInputModel) { string URIdeposit = $"api/transaction/initialize"; if (accountInputModel.CurrencyId < 1) { return(BadRequest("Account cannot be added")); } var result = await _accountRepository.AddAccount(_mapper.Map <Account>(accountInputModel)); TransactionEntityInputModel transactionEntityInputModel = new TransactionEntityInputModel { Amount = 19000 }; if (result.IsOkay) { if (result.RequestData == null) { return(Problem($"Added account not found", statusCode: 520)); } transactionEntityInputModel.Account = new AccountShortInputModel { Id = (long)result.RequestData.Id, CurrencyId = result.RequestData.Currency.Id }; var requestResult = await RequestSender.SendRequest <TransactionEntityOutputModel>(_urlOptions.Value.TransactionStoreApiUrl, URIdeposit, Method.POST, transactionEntityInputModel); if (requestResult.IsSuccessful) { return(Ok(_mapper.Map <AccountOutputModel>(result.RequestData))); } } return(Problem($"Transaction failed {result.ExMessage}", statusCode: 520)); }
public async ValueTask Setup() { _urlOptions = Resolve <IOptions <UrlOptions> >(); _paypalOptions = Resolve <IOptions <PayPalOptions> >(); _accountRepository = Resolve <IAccountRepository>(); _systemUnderTest = new TransactionController(_urlOptions, _paypalOptions, _accountRepository); await DropOrRestoreTestDbs("Dbs_Restore"); _transactionToInsert = (TransactionEntityInputModel)TransactionInputModelMock.transactionInputModel.Clone(); _transferToInsert = (TransferInputModel)TransferInputModelMock.transactionInputModel.Clone(); }
public async ValueTask <ActionResult <TransactionEntityOutputModel> > DepositTransactionInsert(TransactionEntityInputModel transactionEntityInputModel) { string URIdeposit = $"api/transaction/deposit"; string URIgetBalance = $"api/transaction/balance/{transactionEntityInputModel.Account.Id}"; var account = await _accountRepository.GetAccountById(transactionEntityInputModel.Account.Id); if (!account.IsOkay) { return(Problem($"Request failed {account.ExMessage}", statusCode: 520)); } if (account.RequestData == null) { return(NotFound($"AccountId: {transactionEntityInputModel.Account.Id} not found")); } var balance = await RequestSender.SendRequest <AccountBalanceOutputModel>(_urlOptions.Value.TransactionStoreApiUrl, URIgetBalance, Method.GET); if (balance == null) { return(Problem($"Request failed", statusCode: 520)); } transactionEntityInputModel.TimeStamp = balance.Data.TimeStamp; var result = await RequestSender.SendRequest <TransactionEntityOutputModel>(_urlOptions.Value.TransactionStoreApiUrl, URIdeposit, Method.POST, transactionEntityInputModel); if (result.StatusCode != System.Net.HttpStatusCode.OK) { return(Problem($"Transaction failed: {result.Content}", statusCode: (int)result.StatusCode)); } return(result.Data); }
public async ValueTask <ActionResult <TransactionEntityOutputModel> > Withdraw(TransactionEntityInputModel inputModel) { if (inputModel.TimeStamp == null) { return(BadRequest("TimeStamp should not be null!")); } if (inputModel.Amount < 0) { return(BadRequest("Withdraw amount must be more than zero!")); } inputModel.Amount = -inputModel.Amount; var result = await _transactionRepository.DepositOrWithdraw(_mapper.Map <TransactionEntity>(inputModel)); if (result.IsOkay) { return(Ok(_mapper.Map <TransactionEntityOutputModel>(result.RequestData))); } if (result.exMessage == "A timestamp constraint violation occurred.") { return(Conflict($"Transaction failed: {result.exMessage}")); } return(Problem($"Transaction failed {result.exMessage}", statusCode: 520)); }
public async ValueTask <ActionResult <TransactionEntityOutputModel> > Initialize(TransactionEntityInputModel inputModel) { var result = await _transactionRepository.InitializeTransaction(_mapper.Map <TransactionEntity>(inputModel)); if (result.IsOkay) { return(Ok(_mapper.Map <TransactionEntityOutputModel>(result.RequestData))); } return(Problem($"Transaction failed: {result.exMessage}", statusCode: 520)); }