Exemple #1
0
 private bool ValidateChargeAccount(ChargeAccount chargeAccounts)
 {
     if (chargeAccounts.Amount < 0)
     {
         return(false);
     }
     return(true);
 }
Exemple #2
0
        private bool ValidateMinAmount(ChargeAccount chargeAcc, decimal amount)
        {
            if (amount >= 10 && amount <= chargeAcc.Amount)
            {
                return(true);
            }

            return(false);
        }
Exemple #3
0
        public async Task <ActionResult <MessageModel> > GetPayOffInfo(ClaimsPrincipal currentUser, string username)
        {
            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

                CreditResponseModel  creditResponseModel = new CreditResponseModel();
                UserAccResponseModel userCredits         = new UserAccResponseModel();

                if (userAuthenticate == null)
                {
                    responseMessage.Message = "User not found!";
                    return(StatusCode(404, responseMessage));
                }
                else
                {
                    ChargeAccount chargeAcc = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.UserId == userAuthenticate.Id);

                    bool hasDeleted = false;
                    foreach (var creditRef in dbContext.Credits.Where(x => x.UserId == userAuthenticate.Id))
                    {
                        var credit = creditRef;
                        if (credit == null)
                        {
                            responseMessage.Message = "You don't have a Credit";
                            return(StatusCode(400, responseMessage));
                        }


                        await GetCreditPayOff(credit, username);

                        if (credit.CreditAmountLeft == 0 && credit.CreditAmount > 0)
                        {
                            CreditRequestModel requestModel = new CreditRequestModel();
                            requestModel.Credit     = credit;
                            requestModel.Username   = username;
                            responseMessage.Message = "You have payed your Credit!";
                            await DeleteCreditFromPayOff(credit, chargeAcc);

                            hasDeleted = true;
                        }
                    }
                    await dbContext.SaveChangesAsync();

                    if (hasDeleted)
                    {
                        responseMessage.Message = ($"Successfully payed montly pay off! Credit payed successfully! The left amount from the  credit is transfered to Bank Account with Iban: {chargeAcc.Iban}");
                        return(StatusCode(200, responseMessage));
                    }
                    responseMessage.Message = "Successfully payed montly pay off!";
                    return(StatusCode(200, responseMessage));
                }
            }

            responseMessage.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseMessage));
        }
Exemple #4
0
 private bool ValidateChargeAccount(ChargeAccount chargeAcc, decimal amount)
 {
     if (chargeAcc != null && chargeAcc.Amount > amount)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemple #5
0
        public async Task <ActionResult <MessageModel> > AddMoney(CreditRequestModel requestModel, ClaimsPrincipal currentUser, string username)
        {
            //credit amount
            var credit           = requestModel.Credit;
            var amount           = requestModel.Amount;
            var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

            Credit        creditsExists = null;
            ChargeAccount bankAccounts  = requestModel.ChargeAccount;
            ChargeAccount bankAccExists = null;

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        creditsExists = await dbContext.Credits.FirstOrDefaultAsync(x => x.Iban == credit.Iban);
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Credit not found";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found!";
                    return(StatusCode(404, responseMessage));
                }

                if (creditsExists != null)
                {
                    try
                    {
                        bankAccExists = dbContext.ChargeAccounts.FirstOrDefault(x => x.Iban == bankAccounts.Iban);
                        return(await ValidateDepositAmountAndCredit(userAuthenticate, creditsExists, currentUser, amount, bankAccExists));
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Invalid Charge Account! Iban not found!";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "Credit not found";
                    return(StatusCode(404, responseMessage));
                }
            }
            responseMessage.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseMessage));
        }
Exemple #6
0
        public async Task <ActionResult <MessageModel> > AddMoney(WalletRequestModel requestModel, ClaimsPrincipal currentUser, string username)
        {
            var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

            var           amount              = requestModel.Amount;
            Wallet        wallet              = requestModel.Wallet;
            Wallet        walletExists        = null;
            ChargeAccount chargeAccount       = requestModel.ChargeAccount;
            ChargeAccount chargeAccountExists = null;

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        walletExists = await dbContext.Wallets.FirstOrDefaultAsync(x => x.Iban == wallet.Iban);

                        if (walletExists != null)
                        {
                            chargeAccountExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == chargeAccount.Iban);

                            if (walletExists.CardExpirationDate < DateTime.Now)
                            {
                                responseMessage.Message = "Wallet Card is expired";
                                return(StatusCode(406, responseMessage));
                            }

                            return(await ValidateDepositAmountAndBankAccount(userAuthenticate, currentUser, walletExists, amount, chargeAccountExists, _transactionsService));
                        }
                        else
                        {
                            responseMessage.Message = "Wallet not found! Invalid Iban!";
                            return(StatusCode(404, responseMessage));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Wallet or Bank account not found! Check Iban!";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found!";
                    return(StatusCode(404, responseMessage));
                }
            }

            responseMessage.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseMessage));
        }
Exemple #7
0
        public void accountTest()
        {
            var raveConfig = new RaveConfig(PbKey, ScKey, false);
            var accountc   = new ChargeAccount(raveConfig);

            var Payload        = new AccountParams(PbKey, ScKey, "customer", "customer", "*****@*****.**", "0690000031", 1000, "044", "NGN", "MC-0292920");
            var chargeResponse = accountc.Charge(Payload).Result;

            if (chargeResponse.Data.Status == "success-pending-validation")
            {
                Payload.Otp    = "12345";
                chargeResponse = accountc.Charge(Payload).Result;
            }
            // ValidateAccountCharge(chargeResponse.Data.FlwRef);

            Assert.IsNotNull(chargeResponse.Data);
            Assert.AreEqual("success", chargeResponse.Status);
        }
Exemple #8
0
        private async Task <ActionResult <MessageModel> > GetCreditPayOff(Credit credit, string username)
        {
            while (DateTime.Now >= credit.PaymentDate)
            {
                if (credit.Instalment <= credit.Amount)
                {
                    credit.Amount           = credit.Amount - credit.Instalment;
                    credit.CreditAmountLeft = credit.CreditAmountLeft - credit.Instalment;
                    credit.PaymentDate      = credit.PaymentDate.AddMonths(1);

                    responseMessage.Message = "Credit instalment payed off successfully from Credit Account!";
                    return(StatusCode(200, responseMessage));
                }
                else
                {
                    int count = 1;
                    var chargeAccountsCollection = dbContext.ChargeAccounts.Where(x => x.UserId == dbContext.Users.FirstOrDefault(z => z.Username == username).Id);
                    foreach (var chargeAccountReff in chargeAccountsCollection)
                    {
                        ChargeAccount chargeAccount = chargeAccountReff;
                        if (credit.Instalment <= chargeAccount.Amount)
                        {
                            chargeAccount.Amount    = chargeAccount.Amount - credit.Instalment;
                            credit.CreditAmountLeft = credit.CreditAmountLeft - credit.Instalment;
                            credit.PaymentDate      = credit.PaymentDate.AddMonths(1);
                            await dbContext.SaveChangesAsync();

                            responseMessage.Message = "Credit instalment payed off successfully from Charge Account!";
                            return(StatusCode(200, responseMessage));
                        }
                        else
                        {
                            if (count > chargeAccountsCollection.Count())
                            {
                                responseMessage.Message = "You don't have enough money to pay off Your instalment! Come to our office as soon as possible to discuss what happens from now on!";
                                return(StatusCode(406, responseMessage));
                            }
                            count++;
                        }
                    }
                }
            }
            return(null);
        }
Exemple #9
0
        public async Task <ActionResult <MessageModel> > DeleteBankAccount(ClaimsPrincipal currentUser, ChargeAccountRequestModel requestModel)
        {
            string        role            = "";
            var           username        = requestModel.Username;
            ChargeAccount chargeAcc       = requestModel.ChargeAccount;
            ChargeAccount chargeAccExists = null;
            Card          cardExists      = null;
            Credit        creditExists    = null;
            UserAccount   userChargeAcc   = null;

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                string userRole = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Roles").Value;
                role = userRole;
            }

            if (role == "Admin")
            {
                var user = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

                if (user != null)
                {
                    try
                    {
                        chargeAccExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == chargeAcc.Iban);

                        cardExists = await dbContext.Cards.FirstOrDefaultAsync(x => x.ChargeAccountId == chargeAccExists.Id);

                        creditExists = await dbContext.Credits.FirstOrDefaultAsync(x => x.UserId == user.Id);

                        userChargeAcc = await dbContext.UserAccounts.FirstOrDefaultAsync(x => x.ChargeAccountId == chargeAccExists.Id);
                    }
                    catch (NullReferenceException)
                    {
                        responseModel.Message = "Charge Account not found! Iban Invalid!";
                        return(StatusCode(404, responseModel));
                    }
                }

                if (user == null)
                {
                    responseModel.Message = "User not found";
                    return(StatusCode(404, responseModel));
                }

                if (chargeAccExists == null)
                {
                    responseModel.Message = "User doesn't have a Charge Account";
                    return(StatusCode(400, responseModel));
                }

                if (cardExists != null)
                {
                    dbContext.Cards.Remove(cardExists);
                    await dbContext.SaveChangesAsync();
                }

                if (creditExists != null)
                {
                    responseModel.Message = "You can't delete Charge account if you have an existing credit!";
                    return(StatusCode(406, responseModel));
                }

                dbContext.ChargeAccounts.Remove(chargeAccExists);
                await dbContext.SaveChangesAsync();

                dbContext.UserAccounts.Remove(userChargeAcc);
                await dbContext.SaveChangesAsync();

                responseModel.Message = $"Succsesfully deleted {user.Username} Charge Account and Debit Card!";
                return(StatusCode(200, responseModel));
            }
            else
            {
                responseModel.Message = "You are not authorized to do such actions";
                return(StatusCode(403, responseModel));
            }
        }
Exemple #10
0
        public async Task <ActionResult <MessageModel> > CreateChargeAccount(ClaimsPrincipal currentUser, ChargeAccountRequestModel requestModel, IDebitCardsService _debitCardService)
        {
            string               role      = "";
            var                  username  = requestModel.Username;
            ChargeAccount        chargeAcc = requestModel.ChargeAccount;
            BCryptPasswordHasher _BCrypt   = new BCryptPasswordHasher();

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                string userRole = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Roles").Value;
                role = userRole;
            }

            if (role == "Admin")
            {
                var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

                if (userAuthenticate != null)
                {
                    if (dbContext.ChargeAccounts.Where(x => x.UserId == userAuthenticate.Id).Count() < 10)
                    {
                        try
                        {
                            if (ValidateUser(userAuthenticate) && ValidateChargeAccount(chargeAcc))
                            {
                                chargeAcc.UserId = userAuthenticate.Id;
                                chargeAcc.Iban   = IBANGenerator.GenerateIBANInVitoshaBank("ChargeAccount", dbContext);
                                await dbContext.AddAsync(chargeAcc);

                                await dbContext.SaveChangesAsync();


                                Card card = new Card();
                                await _debitCardService.CreateDebitCard(currentUser, username, chargeAcc, card);

                                SendEmail(userAuthenticate.Email, _config);
                                responseModel.Message = "Charge Account created succesfully";
                                return(StatusCode(201, responseModel));
                            }
                            else if (ValidateUser(userAuthenticate) == false)
                            {
                                responseModel.Message = "User not found!";
                                return(StatusCode(404, responseModel));
                            }
                            else if (ValidateChargeAccount(chargeAcc) == false)
                            {
                                responseModel.Message = "Invalid parameteres!";
                                return(StatusCode(400, responseModel));
                            }
                        }
                        catch (NullReferenceException)
                        {
                            responseModel.Message = "Invalid parameteres!";
                            return(StatusCode(400, responseModel));
                        }
                    }

                    responseModel.Message = "User already has 10 Charge Accounts!";
                    return(StatusCode(400, responseModel));
                }
                else
                {
                    responseModel.Message = "User not found!";
                    return(StatusCode(404, responseModel));
                }
            }
            else
            {
                responseModel.Message = "You are not authorized to do such actions";
                return(StatusCode(403, responseModel));
            }
        }
Exemple #11
0
        public async Task <ActionResult <MessageModel> > Withdraw(string cardNumber, string CVV, DateTime expireDate, ClaimsPrincipal currentUser, string username, decimal amount, string reciever, /*ITransactionService _transactionService*/ IChargeAccountsService _chargeAccService)
        {
            var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

            ChargeAccount bankAccountsExists = null;
            Card          cardsExists        = null;

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        cardsExists = await dbContext.Cards.FirstOrDefaultAsync(x => x.CardNumber == cardNumber);

                        if (_BCrypt.AuthenticateDebitCardCVV(CVV, cardsExists))
                        {
                            if (cardsExists == null)
                            {
                                responseMessage.Message = "Debit Card not found";
                                return(StatusCode(404, responseMessage));
                            }

                            bankAccountsExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Card == cardsExists);
                        }
                        else
                        {
                            responseMessage.Message = "Invalid Credentials";
                            return(StatusCode(400, responseMessage));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Debit Card not found";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found!";
                    return(StatusCode(404, responseMessage));
                }

                if (bankAccountsExists != null)
                {
                    try
                    {
                        if (cardsExists.CardExpirationDate < DateTime.Now)
                        {
                            responseMessage.Message = "Debit Card is expired";
                            return(StatusCode(406, responseMessage));
                        }
                        ChargeAccountRequestModel requestModel = new ChargeAccountRequestModel();
                        requestModel.ChargeAccount = bankAccountsExists;

                        requestModel.Amount   = amount;
                        requestModel.Reciever = reciever;
                        await _chargeAccService.Withdraw(requestModel, currentUser, username);

                        responseMessage.Message = "Withdraw successfull";
                        return(StatusCode(200, responseMessage));
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Bank Account not found";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else if (bankAccountsExists == null)
                {
                    responseMessage.Message = "Bank Account not found";
                    return(StatusCode(404, responseMessage));
                }
            }

            responseMessage.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseMessage));
        }
Exemple #12
0
        public async Task <ActionResult <MessageModel> > SimulatePurchase(ChargeAccountRequestModel requestModel, ClaimsPrincipal currentUser, string username)
        {
            var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

            var           product         = requestModel.Product;
            var           reciever        = requestModel.Reciever;
            var           amount          = requestModel.Amount;
            ChargeAccount chargeAcc       = requestModel.ChargeAccount;
            ChargeAccount chargeAccExists = null;

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        chargeAccExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == chargeAcc.Iban);

                        if (chargeAccExists != null && ValidateDepositAmountChargeAccount(amount) && ValidateChargeAccount(chargeAccExists, amount))
                        {
                            chargeAcc.Amount = chargeAcc.Amount - amount;
                            Transaction transactions = new Transaction();
                            transactions.SenderAccountInfo   = chargeAccExists.Iban;
                            transactions.RecieverAccountInfo = reciever;
                            await _transactionsService.CreateTransaction(userAuthenticate, currentUser, amount, transactions, $"Purchasing {product} with Charge Account");

                            await dbContext.SaveChangesAsync();

                            responseModel.Message = $"Succesfully purhcased {product}.";
                            return(StatusCode(200, responseModel));
                        }
                        else if (chargeAccExists == null)
                        {
                            responseModel.Message = "Charge Account not found! Invalid Iban";
                            return(StatusCode(404, responseModel));
                        }
                        else if (ValidateDepositAmountChargeAccount(amount) == false)
                        {
                            responseModel.Message = "Invalid payment amount!";
                            return(StatusCode(400, responseModel));
                        }
                        else if (ValidateChargeAccount(chargeAccExists, amount) == false)
                        {
                            responseModel.Message = "You don't have enough money in Charge account!";
                            return(StatusCode(406, responseModel));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseModel.Message = "Charge Account not found! Invalid Iban";
                        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));
        }
Exemple #13
0
        public async Task <ActionResult <MessageModel> > DepositMoney(ChargeAccount bankAccount, Deposit deposit, ClaimsPrincipal currentUser, string username, decimal amount)
        {
            var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

            ChargeAccount bankAccounts  = null;
            Deposit       depositsExist = null;

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        bankAccounts = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == bankAccount.Iban);

                        depositsExist = await dbContext.Deposits.FirstOrDefaultAsync(x => x.Iban == deposit.Iban);
                    }
                    catch (NullReferenceException)
                    {
                        responseModel.Message = "Invalid Iban for Charge Account or Deposit! Please check Iban";
                        return(StatusCode(400, responseModel));
                    }
                }
                else
                {
                    responseModel.Message = "User not found!";
                    return(StatusCode(404, responseModel));
                }

                if (bankAccounts != null && depositsExist != null)
                {
                    try
                    {
                        if (ValidateDepositAmountChargeAccount(amount))
                        {
                            bankAccounts.Amount  = bankAccounts.Amount + amount;
                            depositsExist.Amount = depositsExist.Amount - amount;
                            await dbContext.SaveChangesAsync();

                            Transaction transactions = new Transaction();
                            transactions.RecieverAccountInfo = bankAccounts.Iban;
                            transactions.SenderAccountInfo   = depositsExist.Iban;
                            await _transactionsService.CreateTransaction(userAuthenticate, currentUser, amount, transactions, "Depositing money Deposit Account -> Charge Account");

                            responseModel.Message = "Money deposited succesfully!";
                            return(StatusCode(200, responseModel));
                        }

                        responseModel.Message = "Invalid deposit amount!";
                        return(StatusCode(400, responseModel));
                    }
                    catch (NullReferenceException)
                    {
                        responseModel.Message = "Charge Account or Deposit not found! Invalid Iban!";
                        return(StatusCode(404, responseModel));
                    }
                }
                else
                {
                    responseModel.Message = "Charge Account or Deposit not found! Invalid Iban!";
                    return(StatusCode(404, responseModel));
                }
            }
            responseModel.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseModel));
        }
Exemple #14
0
        private async Task <ActionResult> ValidateDepositAmountAndCredit(User userAuthenticate, Credit creditExists, ClaimsPrincipal currentUser, decimal amount, ChargeAccount bankAccount)
        {
            if (amount < 0)
            {
                responseMessage.Message = "Invalid payment amount!";
                return(StatusCode(400, responseMessage));
            }
            else if (amount == 0)
            {
                responseMessage.Message = "Put amount more than 0.00lv";
                return(StatusCode(400, responseMessage));
            }
            else
            {
                if (bankAccount != null && bankAccount.Amount > amount)
                {
                    creditExists.Amount = creditExists.Amount + amount;
                    bankAccount.Amount  = bankAccount.Amount - amount;
                    Transaction transaction = new Transaction();
                    transaction.SenderAccountInfo   = bankAccount.Iban;
                    transaction.RecieverAccountInfo = creditExists.Iban;
                    await _transactionsService.CreateTransaction(userAuthenticate, currentUser, amount, transaction, $"Depositing money in Credit Account");

                    await dbContext.SaveChangesAsync();
                }
                else if (bankAccount.Amount < amount)
                {
                    responseMessage.Message = "You don't have enough money in Charge account!";
                    return(StatusCode(406, responseMessage));
                }
                else if (bankAccount == null)
                {
                    responseMessage.Message = "You don't have a Charge account";
                    return(StatusCode(400, responseMessage));
                }
            }
            responseMessage.Message = $"Succesfully deposited {amount} leva.";
            return(StatusCode(200, responseMessage));
        }
Exemple #15
0
 private async Task <ActionResult <MessageModel> > DeleteCreditFromPayOff(Credit credit, ChargeAccount chargeAccount)
 {
     chargeAccount.Amount   += credit.Amount;
     responseMessage.Message = ($"Credit payed successfully! The left amount from the  credit is transfered to Bank Account with Iban: {chargeAccount.Iban}");
     dbContext.Remove(credit);
     return(StatusCode(200, responseMessage));
 }
Exemple #16
0
        public async Task <ActionResult <MessageModel> > CreateDebitCard(ClaimsPrincipal currentUser, string username, ChargeAccount bankAccount, Card card)
        {
            string role = "";

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                string userRole = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Roles").Value;
                role = userRole;
            }

            if (role == "Admin")
            {
                var userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);

                Card          cardExists        = null;
                ChargeAccount bankAccountExists = null;

                if (userAuthenticate != null)
                {
                    try
                    {
                        bankAccountExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == bankAccount.Iban);

                        if (bankAccountExists == null)
                        {
                            responseMessage.Message = "No Bank Account found! Invalid Iban!";
                            return(StatusCode(404, responseMessage));
                        }
                        cardExists = await dbContext.Cards.FirstOrDefaultAsync(x => x.ChargeAccountId == bankAccountExists.Id);
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "No Bank Account found! Invalid Iban!";
                        return(StatusCode(404, responseMessage));
                    }
                }


                if (cardExists == null)
                {
                    try
                    {
                        if (ValidateUser(userAuthenticate))
                        {
                            if (card == null)
                            {
                                card = new Card();
                            }

                            card.ChargeAccountId = bankAccountExists.Id;
                            card.CardNumber      = GenerateCardInfo.GenerateNumber(11);
                            var CVV = GenerateCardInfo.GenerateCVV(3);
                            card.Cvv = _BCrypt.HashPassword(CVV);
                            card.CardExpirationDate = DateTime.Now.AddMonths(60);
                            dbContext.Add(card);
                            await dbContext.SaveChangesAsync();

                            responseMessage.Message = "Debit Card created succesfully!";
                            return(StatusCode(200, responseMessage));
                        }
                        else if (ValidateUser(userAuthenticate) == false)
                        {
                            responseMessage.Message = "User not found!";
                            return(StatusCode(404, responseMessage));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "User not found!";
                        return(StatusCode(404, responseMessage));
                    }
                }

                responseMessage.Message = "User already has a Debit Card!";
                return(StatusCode(400, responseMessage));
            }
            else
            {
                responseMessage.Message = "You are not autorized to do such actions!";
                return(StatusCode(403, responseMessage));
            }
        }
Exemple #17
0
        public async Task <ActionResult <MessageModel> > AddMoney(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;

            string role = "";

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                string userRole = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Roles").Value;
                role = userRole;
            }

            if (role == "Admin")
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        chargeAccExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == chargeAcc.Iban);

                        if (chargeAccExists != null)
                        {
                            if (ValidateDepositAmountChargeAccount(amount))
                            {
                                chargeAcc.Amount = chargeAcc.Amount + amount;
                                await dbContext.SaveChangesAsync();

                                Transaction transactions = new Transaction();
                                transactions.SenderAccountInfo   = $"User {userAuthenticate.FirstName} {userAuthenticate.LastName}";
                                transactions.RecieverAccountInfo = chargeAcc.Iban;
                                await _transactionsService.CreateTransaction(userAuthenticate, currentUser, amount, transactions, "Depositing money in Charge Account");

                                responseModel.Message = $"Succesfully deposited {amount} leva in Charge Account.";
                                return(StatusCode(200, responseModel));
                            }

                            responseModel.Message = "Invalid money amount!";
                            return(StatusCode(400, 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));
        }
Exemple #18
0
        public async Task <ActionResult <MessageModel> > AddMoney(DepositRequestModel requestModel, ClaimsPrincipal currentUser, string username)
        {
            User          userAuthenticate    = null;
            Deposit       deposit             = requestModel.Deposit;
            Deposit       depositExists       = null;
            ChargeAccount chargeAccount       = requestModel.ChargeAccount;
            ChargeAccount chargeAccountExists = null;
            var           amount = requestModel.Amount;

            try
            {
                userAuthenticate = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == username);
            }
            catch (NullReferenceException)
            {
                responseMessage.Message = "User not found";
                return(StatusCode(400, responseMessage));
            }

            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                if (userAuthenticate != null)
                {
                    try
                    {
                        depositExists = await dbContext.Deposits.FirstOrDefaultAsync(x => x.Iban == deposit.Iban);

                        if (depositExists != null)
                        {
                            chargeAccountExists = await dbContext.ChargeAccounts.FirstOrDefaultAsync(x => x.Iban == chargeAccount.Iban);

                            if (amount < 0)
                            {
                                responseMessage.Message = "Invalid payment amount!";
                                return(StatusCode(400, responseMessage));
                            }
                            else if (amount == 0)
                            {
                                responseMessage.Message = "Put amount more than 0.00lv";
                                return(StatusCode(400, responseMessage));
                            }
                            else
                            {
                                if (chargeAccountExists != null && chargeAccount.Amount > amount)
                                {
                                    deposit.Amount       = deposit.Amount + amount;
                                    deposit.PaymentDate  = DateTime.Now.AddMonths(6);
                                    chargeAccount.Amount = chargeAccount.Amount - amount;
                                    Transaction transaction = new Transaction();
                                    transaction.SenderAccountInfo   = $"User {userAuthenticate.FirstName} {userAuthenticate.LastName}";
                                    transaction.RecieverAccountInfo = depositExists.Iban;

                                    await dbContext.SaveChangesAsync();

                                    await _transactionsService.CreateTransaction(userAuthenticate, currentUser, amount, transaction, "Added money - Bank Account - Deposit account");
                                }
                                else if (chargeAccountExists == null)
                                {
                                    responseMessage.Message = "Charge Account Iban is invalid!";
                                    return(StatusCode(400, responseMessage));
                                }
                                else if (chargeAccountExists.Amount < amount)
                                {
                                    responseMessage.Message = "You don't have enough money in Bank Account!";
                                    return(StatusCode(406, responseMessage));
                                }
                            }
                            responseMessage.Message = $"Succesfully deposited {amount} leva.";
                            return(StatusCode(200, responseMessage));
                        }
                        else
                        {
                            responseMessage.Message = "Invalid Iban! Deposit not found";
                            return(StatusCode(404, responseMessage));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Invalid Iban! Deposit not found";
                        return(StatusCode(404, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found!";
                    return(StatusCode(404, responseMessage));
                }
            }

            responseMessage.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, responseMessage));
        }
Exemple #19
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));
        }