public async Task <ActionResult <ICollection <ChargeAccountResponseModel> > > GetBankAccountInfo(ClaimsPrincipal currentUser, string username) { if (currentUser.HasClaim(c => c.Type == "Roles")) { var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username); UserAccResponseModel userChargeAccounts = new UserAccResponseModel(); if (userAuthenticate == null) { responseModel.Message = "User not found"; return(StatusCode(404, responseModel)); } else { List <ChargeAccountResponseModel> charges = new List <ChargeAccountResponseModel>(); foreach (var chargeAccRef in dbContext.ChargeAccounts.Where(x => x.UserId == userAuthenticate.Id)) { ChargeAccountResponseModel chargeAccResponseModel = new ChargeAccountResponseModel(); var chargeAcc = chargeAccRef; chargeAccResponseModel.IBAN = chargeAcc.Iban; chargeAccResponseModel.Amount = Math.Round(chargeAcc.Amount, 2); charges.Add(chargeAccResponseModel); } if (charges.Count > 0) { return(StatusCode(200, charges.OrderBy(x => x.IBAN))); } responseModel.Message = "You don't have a Charge Account!"; return(StatusCode(400, responseModel)); } } else { responseModel.Message = "You are not authorized to do such actions"; return(StatusCode(403, responseModel)); } }
public async Task <ActionResult <MessageModel> > Withdraw(ChargeAccountRequestModel requestModel, ClaimsPrincipal currentUser, string username) { var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username); var amount = requestModel.Amount; ChargeAccount chargeAcc = requestModel.ChargeAccount; ChargeAccount chargeAccExists = null; ChargeAccountResponseModel chargeAccResponseModel = new ChargeAccountResponseModel(); if (currentUser.HasClaim(c => c.Type == "Roles")) { if (userAuthenticate != null) { try { chargeAccExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == chargeAcc.Iban); if (chargeAccExists != null) { if (ValidateDepositAmountChargeAccount(amount) && ValidateChargeAccount(chargeAcc, amount) && ValidateMinAmount(chargeAcc, amount)) { chargeAcc.Amount = chargeAcc.Amount - amount; Transaction transactions = new Transaction(); transactions.SenderAccountInfo = chargeAcc.Iban; transactions.RecieverAccountInfo = $"{userAuthenticate.FirstName} {userAuthenticate.LastName}"; await _transactionsService.CreateTransaction(userAuthenticate, currentUser, amount, transactions, $"Withdrawing {amount} leva"); await dbContext.SaveChangesAsync(); responseModel.Message = $"Succesfully withdrawed {amount} leva."; return(StatusCode(200, responseModel)); } else if (ValidateDepositAmountChargeAccount(amount) == false) { responseModel.Message = "Invalid payment amount!"; return(StatusCode(400, responseModel)); } else if (ValidateChargeAccount(chargeAcc, amount) == false) { responseModel.Message = "You don't have enough money in Charge Account!"; return(StatusCode(406, responseModel)); } else if (ValidateMinAmount(chargeAcc, amount) == false) { responseModel.Message = "Min amount is 10 leva!"; return(StatusCode(406, responseModel)); } } else { responseModel.Message = "Charge Account not found! Iban Invalid!"; return(StatusCode(404, responseModel)); } } catch (NullReferenceException) { responseModel.Message = "Charge Account not found! Iban Invalid!"; return(StatusCode(404, responseModel)); } } else { responseModel.Message = "User not found!"; return(StatusCode(404, responseModel)); } } responseModel.Message = "You are not autorized to do such actions!"; return(StatusCode(403, responseModel)); }