Exemple #1
0
        public async Task <ActionResult <MessageModel> > CreateBankAccount(ChargeAccountRequestModel requestModel)
        {
            //need username, BankAccount(amount)
            var currentUser = HttpContext.User;

            return(await _chargeAccountService.CreateChargeAccount(currentUser, requestModel, _debitCardService));
        }
Exemple #2
0
        public async Task <ActionResult <MessageModel> > Withdraw(ChargeAccountRequestModel requestModel)
        {
            var    currentUser = HttpContext.User;
            string username    = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Username").Value;

            return(await _chargeAccService.Withdraw(requestModel, currentUser, username));
        }
Exemple #3
0
        public async Task <ActionResult <MessageModel> > DeleteBankAccount(ChargeAccountRequestModel requestModel)
        {
            //need username
            var currentUser = HttpContext.User;

            return(await _chargeAccountService.DeleteBankAccount(currentUser, requestModel));
        }
Exemple #4
0
        public async Task <ActionResult <MessageModel> > DepositInBankAcc(ChargeAccountRequestModel requestModel)
        {
            //amount = 0.50M;
            var    currentUser = HttpContext.User;
            string username    = currentUser.Claims.FirstOrDefault(currentUser => currentUser.Type == "Username").Value;

            return(await _chargeAccService.DepositMoney(requestModel.ChargeAccount, requestModel.Deposit, currentUser, username, requestModel.Amount));
        }
Exemple #5
0
        //need BankAccount(IBAN), username, amount
        public async Task <ActionResult <MessageModel> > AddMoneyInBankAccount(ChargeAccountRequestModel requestModel)
        {
            var currentUser = HttpContext.User;

            return(await _chargeAccountService.AddMoney(requestModel, currentUser, requestModel.Username));
        }
Exemple #6
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 #7
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 #8
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 #9
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));
        }
Exemple #10
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 #11
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));
        }