public async Task <IActionResult> PostUser_Client_Card_Info(string appid, [FromBody] User_Client_Card_Info user_Client_Card_Info, [FromServices] BankContext BankDb) { try { //Authentication of API if (appid == null) { return(BadRequest()); } var user = _context.Users.Where(e => e.AppId.ToString().CompareTo(appid) == 1).Select(e => e); if (user == null) { return(BadRequest("You are not authorised to use the API, Please register or Contact Administrator")); } // Verify Model if (!ModelState.IsValid) { return(BadRequest(ModelState)); } //Check if user has valid card details if (_context.User_Clients_Card_Info.Where(e => e.CardNumber == user_Client_Card_Info.CardNumber) == null) { return(BadRequest("Card Number is not valid")); } var bank_User_Client_Card_Info = BankDb.Bank_User_Client_Card_Info.Where(e => e.CardNumber == user_Client_Card_Info.CardNumber).Select(e => e).FirstOrDefault(); if (bank_User_Client_Card_Info == null) { return(BadRequest("Card Number is not valid")); } decimal availableAmount = 0; var account = BankDb.Bank_User_Client_Account.Where(e => e.AccountNumber == bank_User_Client_Card_Info.AccountNumber).FirstOrDefault(); if (account == null) { return(BadRequest("Account Number is not valid")); } availableAmount = account.AvailableAmount - user_Client_Card_Info.TransactionAmount; account.AvailableAmount = availableAmount; BankDb.Entry(account).State = EntityState.Modified; try { await BankDb.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { return(NotFound()); } } catch (Exception e) { return(BadRequest(e.Message)); } return(CreatedAtAction("GetUser_Client_Card_Info", new { id = user_Client_Card_Info.CardNumber }, user_Client_Card_Info)); }
public async Task <JsonResult> PostResult(User_Client_Card_Info User_Client_Card_Info) { using (HttpClient client = new HttpClient()) { var content = new StringContent(JsonConvert.SerializeObject(User_Client_Card_Info), Encoding.UTF8, "application/json"); var response = await client.PostAsync("https://localhost:44311/api/PaymentGateway?appid=0c56f2c2-5457-4a32-ba2b-971afdb9f99e&CardNumber=2407199449917042", content); var responseString = await response.Content.ReadAsStringAsync(); return(Json(responseString, JsonRequestBehavior.AllowGet)); }; }
public ActionResult About(decimal price, string desc) { User_Client_Card_Info a = new User_Client_Card_Info { TransactionAmount = price, PurchaseDescription = desc, CardNumber = "2407199449917042", IdentityNumber = "K2407944608215", CardType = "Credit", ExpirationDate = DateTime.Parse("2030-12-30") }; return(View(a)); }
public async Task <ActionResult> About(User_Client_Card_Info User_Client_Card_Info) { var s = await PostResult(User_Client_Card_Info); return(RedirectToAction("Index")); }
public async Task <IActionResult> PostPaymentGateway(string appid, [FromBody] User_Client_Card_Info user_Client_Card_Info, [FromServices] BankContext BankDb) { var TransactionHist = new Models.Transaction_History(); try { //Authentication of API if (appid == null) { return(BadRequest()); } var user = _context.Users.Where(e => e.AppId.ToString().CompareTo(appid) == 1).Select(e => e); if (user == null) { return(BadRequest("You are not authorised to use the API, Please register or Contact Administrator")); } // Verify Model if (!ModelState.IsValid) { return(BadRequest(ModelState)); } //Check if user has valid card details if (_context.User_Clients_Card_Info.Where(e => e.CardNumber == user_Client_Card_Info.CardNumber) == null) { return(BadRequest("Card Number is not valid")); } //linked the card with his account var bank_User_Client_Card_Info = BankDb.Bank_User_Client_Card_Info.Where(e => e.CardNumber == user_Client_Card_Info.CardNumber).Select(e => e).FirstOrDefault(); if (bank_User_Client_Card_Info == null) { return(BadRequest("Card Number is not valid")); } //declare new amount decimal availableAmount = 0; var account = BankDb.Bank_User_Client_Account.Where(e => e.AccountNumber == bank_User_Client_Card_Info.AccountNumber).FirstOrDefault(); if (account == null) { return(BadRequest("Account Number is not valid")); } //Deduce the purchase price in the account availableAmount = account.AvailableAmount - user_Client_Card_Info.TransactionAmount; //update the db available amount account.AvailableAmount = availableAmount; BankDb.Entry(account).State = EntityState.Modified; try { await BankDb.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { return(NotFound()); } //write transaction into hist BankDb.Bank_Transaction_History.Add(new Models.BankModel.Bank_Transaction_History { TransactionId = Guid.NewGuid().ToString(), CardNumber = user_Client_Card_Info.CardNumber, TransactionDate = DateTime.Now, TransactionAmount = user_Client_Card_Info.TransactionAmount, TransactionType = "Debit", TransactionStatus = "Success" }); try { await BankDb.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { return(NotFound()); } TransactionHist = new Models.Transaction_History { TransactionDate = DateTime.Now, CardNumber = user_Client_Card_Info.CardNumber, PurchaseAmount = user_Client_Card_Info.TransactionAmount, PurchaseDescription = user_Client_Card_Info.PurchaseDescription, TransactionStatus = "Success" }; _context.Transaction_History.Add(TransactionHist); try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { return(NotFound()); } } catch (Exception e) { return(BadRequest(e.Message)); } return(Ok(TransactionHist)); }