Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        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));
        }