Exemplo n.º 1
0
        public async Task <ActionResult <MessageModel> > CreateSupportTicket(ClaimsPrincipal currentUser, string username, SupportTicket ticket)
        {
            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                var userAuthenticate = await _context.Users.FirstOrDefaultAsync(x => x.Username == username);

                if (userAuthenticate != null)
                {
                    if (ticket != null)
                    {
                        if (ticket.Title == null || ticket.Message == null)
                        {
                            responseMessage.Message = "Ticket must have title and message!";
                            return(StatusCode(400, responseMessage));
                        }
                        if (ticket.Title.Length > 2 && ticket.Message.Length > 2 && ticket.Title.Length < 60 && ticket.Message.Length < 200)
                        {
                            ticket.Date        = DateTime.Now;
                            ticket.UserId      = userAuthenticate.Id;
                            ticket.Date        = DateTime.Now;
                            ticket.HasResponce = false;
                            _context.Add(ticket);
                            await _context.SaveChangesAsync();

                            responseMessage.Message = "Ticket created succesfully";
                            return(StatusCode(200, responseMessage));
                        }
                        else
                        {
                            responseMessage.Message = "Ticket must have title and message less than 200 symbols!";
                            return(StatusCode(400, responseMessage));
                        }
                    }
                    else
                    {
                        responseMessage.Message = "Invalid Ticket Input";
                        return(StatusCode(400, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found";
                    return(StatusCode(404, responseMessage));
                }
            }
            else
            {
                responseMessage.Message = "You are not authorized to do such actions";
                return(StatusCode(400, responseMessage));
            }
        }
        public async Task <ActionResult <MessageModel> > GetDividentPayment(Deposit deposit)
        {
            if (DateTime.Now >= deposit.PaymentDate)
            {
                var dividentAmount = CalculateDivident.GetDividentAmount(deposit.Amount, deposit.Divident, deposit.TermOfPayment);
                deposit.Amount = deposit.Amount + dividentAmount;
                deposit.PaymentDate.AddMonths(deposit.TermOfPayment);
                await dbContext.SaveChangesAsync();

                messageModel.Message = "Deposit divident applied successfully!";
                return(StatusCode(200, messageModel));
            }
            return(null);
        }
Exemplo n.º 3
0
        public 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);
                    _context.SaveChanges();
                    responseMessage.Message = "Credit instalment payed off successfully from Credit Account!";
                    return(StatusCode(200, responseMessage));
                }
                else
                {
                    int count = 1;
                    var chargeAccountsCollection = _context.ChargeAccounts.Where(x => x.UserId == _context.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 _context.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);
        }
Exemplo n.º 4
0
        public async Task <ActionResult <MessageModel> > CreateDeposit(ClaimsPrincipal currentUser, DepositRequestModel requestModel)
        {
            string  role     = "";
            var     username = requestModel.Username;
            Deposit deposit  = requestModel.Deposit;

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

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

                if (userAuthenticate != null)
                {
                    try
                    {
                        if (dbContext.Deposits.Where(x => x.UserId == userAuthenticate.Id).Count() < 6)
                        {
                            if (ValidateUser(userAuthenticate) && ValidateDeposits(deposit))
                            {
                                deposit.Iban = IBANGenerator.GenerateIBANInVitoshaBank("Deposit", dbContext);

                                if (deposit.TermOfPayment == 3 || deposit.TermOfPayment == 6 || deposit.TermOfPayment == 12 || deposit.TermOfPayment == 1)
                                {
                                    deposit.PaymentDate = DateTime.Now.AddMonths(deposit.TermOfPayment);
                                    deposit.Divident    = CalculateDivident.GetDividentPercent(deposit.Amount, deposit.TermOfPayment);
                                    deposit.UserId      = userAuthenticate.Id;
                                    await dbContext.AddAsync(deposit);

                                    await dbContext.SaveChangesAsync();

                                    SendEmail(userAuthenticate.Email);
                                    responseMessage.Message = "Deposit created succesfully";
                                    return(StatusCode(200, responseMessage));
                                }
                                else
                                {
                                    responseMessage.Message = "Deposit Term of paymet must be 1, 3, 6 or 12 months";
                                    return(StatusCode(400, responseMessage));
                                }
                            }
                            else if (ValidateUser(userAuthenticate) == false)
                            {
                                responseMessage.Message = "User not found";
                                return(StatusCode(404, responseMessage));
                            }
                            else if (ValidateDeposits(deposit) == false)
                            {
                                responseMessage.Message = "Invalid payment amount!";
                                return(StatusCode(400, responseMessage));
                            }
                            else
                            {
                                return(null);
                            }
                        }
                        else
                        {
                            responseMessage.Message = "User already has the maximum of 5 Deposits!";
                            return(StatusCode(400, responseMessage));
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "Invalid credentials";
                        return(StatusCode(400, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "User not found";
                    return(StatusCode(404, responseMessage));
                }
            }
            else
            {
                responseMessage.Message = "You are not authorized to do such actions";
                return(StatusCode(403, responseMessage));
            }
        }
Exemplo n.º 5
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));
            }
        }
        public async Task <ActionResult> CreateTransaction(User user, ClaimsPrincipal currentUser, decimal amount, Transaction transaction, string reason)
        {
            if (currentUser.HasClaim(c => c.Type == "Roles"))
            {
                List <Transaction> transactions = new List <Transaction>();

                TransactionResponseModel sender   = new TransactionResponseModel();
                TransactionResponseModel reciever = new TransactionResponseModel();
                if (transaction.SenderAccountInfo.Contains("BG18VITB") && transaction.SenderAccountInfo.Length == 23)
                {
                    sender.IsIBAN         = true;
                    sender.SenderInfo     = transaction.SenderAccountInfo;
                    reciever.RecieverInfo = transaction.RecieverAccountInfo;

                    if (transaction.RecieverAccountInfo.Contains("BG18VITB") && transaction.RecieverAccountInfo.Length == 23)
                    {
                        reciever.IsIBAN       = true;
                        reciever.RecieverInfo = transaction.RecieverAccountInfo;
                    }
                }
                else if (transaction.RecieverAccountInfo.Contains("BG18VITB") && transaction.RecieverAccountInfo.Length == 23)
                {
                    reciever.IsIBAN       = true;
                    sender.SenderInfo     = transaction.SenderAccountInfo;
                    reciever.RecieverInfo = transaction.RecieverAccountInfo;
                }
                else
                {
                    _messageModel.Message = "Invalid arguments!";
                    return(StatusCode(400, _messageModel));
                }
                //bad request
                if (sender.IsIBAN && reciever.IsIBAN)
                {
                    transaction.Reason            = reason;
                    transaction.Date              = DateTime.Now;
                    transaction.TransactionAmount = amount;
                    _context.Add(transaction);
                    await _context.SaveChangesAsync();

                    transactions           = _context.Transactions.ToList();
                    user.LastTransactionId = transactions.Last().Id;
                    await _context.SaveChangesAsync();

                    _messageModel.Message = "Money send successfully!";
                    return(StatusCode(200, _messageModel));
                }
                else if (sender.IsIBAN && !reciever.IsIBAN)
                {
                    transaction.Reason            = reason;
                    transaction.Date              = DateTime.Now;
                    transaction.TransactionAmount = amount;
                    _context.Add(transaction);
                    await _context.SaveChangesAsync();

                    transactions           = _context.Transactions.ToList();
                    user.LastTransactionId = transactions.Last().Id;
                    await _context.SaveChangesAsync();

                    _messageModel.Message = "Purchase successfull!";
                    return(StatusCode(200, _messageModel));
                }
                else if (!sender.IsIBAN && reciever.IsIBAN)
                {
                    transaction.Reason            = reason;
                    transaction.Date              = DateTime.Now;
                    transaction.TransactionAmount = amount;
                    _context.Add(transaction);
                    await _context.SaveChangesAsync();

                    transactions           = _context.Transactions.ToList();
                    user.LastTransactionId = transactions.Last().Id;
                    await _context.SaveChangesAsync();

                    _messageModel.Message = "Money recieved successfully!";
                    return(StatusCode(200, _messageModel));
                }
            }

            _messageModel.Message = "You are not autorized to do such actions!";
            return(StatusCode(403, _messageModel));
        }
Exemplo n.º 7
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));
            }
        }
Exemplo n.º 8
0
        public async Task <ActionResult <MessageModel> > CreateUser(ClaimsPrincipal currentUser, UserRequestModel requestModel)
        {
            string             role            = "";
            var                user            = requestModel.User;
            List <Transaction> userTransaction = new List <Transaction>();

            User userUsernameExists = await dbContext.Users.FirstOrDefaultAsync(x => x.Username == user.Username);

            User userEmailExists = await dbContext.Users.FirstOrDefaultAsync(x => x.Email == user.Email);

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

            if (role == "Admin")
            {
                if (userUsernameExists == null && userEmailExists == null)
                {
                    if (user.FirstName.Length < 1 || user.FirstName.Length > 60)
                    {
                        responseMessage.Message = "First name cannot be less than 1 symbol or larger than 60 symbols";
                        return(StatusCode(400, responseMessage));
                    }
                    if (user.LastName.Length < 1 || user.LastName.Length > 60)
                    {
                        responseMessage.Message = "Last name cannot be less than 1 symbol or larger than 60 symbols";
                        return(StatusCode(400, responseMessage));
                    }
                    if (user.Email.Length < 6 || user.Email.Length > 60)
                    {
                        responseMessage.Message = "Email cannot be less than 1 symbol or larger than 60 symbols";
                        return(StatusCode(400, responseMessage));
                    }
                    if (!user.Email.Contains("@"))
                    {
                        responseMessage.Message = "Invalid Email";
                        return(StatusCode(400, responseMessage));
                    }
                    if (user.Username.Length < 6 || user.Username.Length > 60)
                    {
                        responseMessage.Message = "Username cannot be less than 6 symbols or larger than 60 symbols";
                        return(StatusCode(400, responseMessage));
                    }
                    if (user.Password.Length < 6)
                    {
                        responseMessage.Message = "Password cannot be less than 6 symbols";
                        return(StatusCode(400, responseMessage));
                    }

                    var vanillaPassword = user.Password;
                    user.Password       = _BCrypt.HashPassword(user.Password);
                    user.ActivationCode = Guid.NewGuid().ToString();
                    user.RegisterDate   = DateTime.Now;
                    await dbContext.AddAsync(user);

                    int i = await dbContext.SaveChangesAsync();


                    if (i > 0)
                    {
                        SendVerificationLinkEmail(user.Email, user.ActivationCode, user.Username, vanillaPassword);
                        responseMessage.Message = $"User {user.Username} created succesfully!";
                        return(StatusCode(201, responseMessage));
                    }
                    else
                    {
                        responseMessage.Message = "Registration failed";
                        return(StatusCode(406, responseMessage));
                    }
                }
                else
                {
                    responseMessage.Message = "Registration failed";
                    return(StatusCode(406, responseMessage));
                }
            }
            else
            {
                responseMessage.Message = "Username or Mail taken. Choose another one";
                return(StatusCode(400, responseMessage));
            }
        }
Exemplo n.º 9
0
        public async Task <ActionResult <MessageModel> > CreateCredit(ClaimsPrincipal currentUser, CreditRequestModel requestModel)
        {
            string role     = "";
            string username = requestModel.Username;
            Credit credit   = requestModel.Credit;
            int    period   = requestModel.Period;
            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.Credits.Where(x => x.UserId != userAuthenticate.Id).Count() < 3)
                    {
                        if (ValidateUser(userAuthenticate) && ValidateCredit(credit))
                        {
                            credit.Iban             = IBANGenerator.GenerateIBANInVitoshaBank("Credit", dbContext);
                            credit.Interest         = 6.9m;
                            credit.CreditAmount     = CalculateInterest.CalculateCreditAmount(credit.Amount, period, credit.Interest);
                            credit.Instalment       = CalculateInterest.CalculateInstalment(credit.CreditAmount, credit.Interest, period);
                            credit.CreditAmountLeft = credit.CreditAmount;
                            credit.PaymentDate      = DateTime.Now.AddMonths(1);
                            credit.UserId           = userAuthenticate.Id;
                            await dbContext.AddAsync(credit);

                            await dbContext.SaveChangesAsync();


                            SendEmail(userAuthenticate.Email);
                            responseMessage.Message = "Credit created succesfully!";
                            return(StatusCode(200, responseMessage));
                        }
                        else if (ValidateUser(userAuthenticate) == false)
                        {
                            responseMessage.Message = "User not found!";
                            return(StatusCode(404, responseMessage));
                        }
                        else if (ValidateCredit(credit) == false)
                        {
                            responseMessage.Message = "Don't put negative value!";
                            return(StatusCode(400, responseMessage));
                        }
                    }
                }

                responseMessage.Message = "User already has 3 active credits!";
                return(StatusCode(400, responseMessage));
            }
            else
            {
                responseMessage.Message = "You are not autorized to do such actions!";
                return(StatusCode(403, responseMessage));
            }
        }
Exemplo n.º 10
0
        public async Task <ActionResult <MessageModel> > CreateWallet(ClaimsPrincipal currentUser, WalletRequestModel requestModel)
        {
            string role     = "";
            var    username = requestModel.Username;
            Wallet wallet   = requestModel.Wallet;
            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)
                {
                    try
                    {
                        if (dbContext.Wallets.Where(x => x.UserId == userAuthenticate.Id).Count() < 7)
                        {
                            if (ValidateUser(userAuthenticate) && ValidateWallet(wallet))
                            {
                                wallet.UserId     = userAuthenticate.Id;
                                wallet.Iban       = IBANGenerator.GenerateIBANInVitoshaBank("Wallet", dbContext);
                                wallet.CardNumber = GenerateCardInfo.GenerateNumber(11);
                                var CVV = GenerateCardInfo.GenerateCVV(3);
                                wallet.Cvv = (_BCrypt.HashPassword(CVV));
                                wallet.CardExpirationDate = DateTime.Now.AddMonths(60);

                                await dbContext.AddAsync(wallet);

                                await dbContext.SaveChangesAsync();

                                SendEmail(userAuthenticate.Email, _config);
                                responseMessage.Message = "Wallet created succesfully!";
                                return(StatusCode(200, responseMessage));
                            }
                            else if (ValidateUser(userAuthenticate) == false)
                            {
                                responseMessage.Message = "User not found!";
                                return(StatusCode(404, responseMessage));
                            }
                            else if (ValidateWallet(wallet) == false)
                            {
                                responseMessage.Message = "Don't put negative value!";
                                return(StatusCode(400, responseMessage));
                            }
                        }
                    }
                    catch (NullReferenceException)
                    {
                        responseMessage.Message = "User not found!";
                        return(StatusCode(404, responseMessage));
                    }
                }

                responseMessage.Message = "User already has 7 wallets!";
                return(StatusCode(400, responseMessage));
            }
            else
            {
                responseMessage.Message = "You are not autorized to do such actions!";
                return(StatusCode(403, responseMessage));
            }
        }