public void Withdraw()
        {
            Console.WriteLine("Vui lòng nhập số tiền cần rút:");
            var amount = Utility.GetDecimalNumber();

            Console.WriteLine("Vui lòng nhập nội dung:");
            var           content            = Console.ReadLine();
            YYTransaction historyTransaction = new YYTransaction
            {
                Id                    = Guid.NewGuid().ToString(),
                Type                  = YYTransaction.TransactionType.WITHDRAW,
                Amount                = amount,
                Content               = content,
                SenderAccountNumber   = Program.currentLoggedInYyAccount.AccountNumber,
                ReceiverAccountNumber = Program.currentLoggedInYyAccount.AccountNumber,
                Status                = YYTransaction.ActiveStatus.DONE
            };

            if (model.UpdateBalance(Program.currentLoggedInYyAccount, historyTransaction))
            {
                Console.WriteLine("Giao dịch thành công!");
            }
            else
            {
                Console.WriteLine("Giao dịch thất bại, vui lòng kiểm tra lại.!");
            }
            Program.currentLoggedInYyAccount = model.GetByAccountNumber(Program.currentLoggedInYyAccount.Username);
            Console.WriteLine("Số dư hiện tại: " + Program.currentLoggedInYyAccount.Balance);
            Console.WriteLine("nhấn Enter để tiếp tục!");
            Console.ReadLine();
        }
        public void Transfer()
        {
            Console.WriteLine("Vui lòng nhập số tài khoản người nhận.");
            var receiverAccountNumber = Console.ReadLine();
            var checkAc = model.GetByAccountNumber(receiverAccountNumber);

            Console.WriteLine("Full Name: " + checkAc.FullName);
            Console.WriteLine("Vui lòng nhập số tiền cần chuyển: ");
            var amount = Utility.GetDecimalNumber();

            Console.WriteLine("Vui lòng nhập nội dung tin nhắn: ");
            var content            = Console.ReadLine();
            var historyTransaction = new YYTransaction()
            {
                Id                    = Guid.NewGuid().ToString(),
                Type                  = YYTransaction.TransactionType.TRANSFER,
                Amount                = amount,
                Content               = content,
                SenderAccountNumber   = Program.currentLoggedInYyAccount.AccountNumber,
                ReceiverAccountNumber = receiverAccountNumber,
                Status                = YYTransaction.ActiveStatus.DONE
            };

            if (model.UpdateTranfers(Program.currentLoggedInYyAccount.AccountNumber, receiverAccountNumber, historyTransaction))
            {
                Console.WriteLine("Giao dịch thành công!");
            }
            else
            {
                Console.WriteLine("Giao dịch thất bại, vui lòng kiểm tra lại.!");
            }
        }
Пример #3
0
        public void Withdraw()
        {
            Console.WriteLine("Withdraw.");
            Console.WriteLine("---------------------------------");
            Console.WriteLine("Please enter amount to withdraw: ");
            var amount = Utility.GetDecimalNumber();

            Console.WriteLine("Please enter message content: ");
            var content            = Console.ReadLine();
            var historyTransaction = new YYTransaction()
            {
                Id                    = Guid.NewGuid().ToString(),
                Type                  = YYTransaction.TransactionType.WITHDRAW,
                Amount                = amount,
                Content               = content,
                SenderAccountNumber   = Program.currentLoggedInYyAccount.AccountNumber,
                ReceiverAccountNumber = Program.currentLoggedInYyAccount.AccountNumber,
                Status                = YYTransaction.ActiveStatus.DONE
            };

            if (model.UpdateBalance(Program.currentLoggedInYyAccount, historyTransaction))
            {
                Console.WriteLine("Transaction success!");
            }
            else
            {
                Console.WriteLine("Transaction fails, please try again!");
            }
            Program.currentLoggedInYyAccount = model.GetByAccountNumber(Program.currentLoggedInYyAccount.AccountNumber);
            Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance);
        }
Пример #4
0
        public bool TransferAmount(YYAccount currentLoggedInYyAccount, YYTransaction historyTransaction)
        {
            bool account = null;

            DbConnection.Instance().OpenConnection();
            var queryString = "select * from `accounts` where username = @accountnumber and status = 1";
            var cmd         = new MySqlCommand(queryString, DbConnection.Instance().Connection);

            cmd.Parameters.AddWithValue("@accountnumber", accountNumber);
            var reader  = cmd.ExecuteReader();
            var isExist = reader.Read();

            if (isExist)
            {
                account = new YYAccount
                {
                    AccountNumber = reader.GetString("accountNumber"),
                    Username      = reader.GetString("username"),
                    Password      = reader.GetString("password"),
                    Salt          = reader.GetString("salt"),
                    FullName      = reader.GetString("fullName"),
                    Balance       = reader.GetInt32("balance")
                };
            }

            DbConnection.Instance().CloseConnection();
            return(account);
        }
Пример #5
0
        public List <YYTransaction> TransactionHistory(string accountNumber)
        {
            DbConnection.Instance().OpenConnection();
            var list = new List <YYTransaction>();

            var sqlQuery =
                "select * from `transactions` where receiverAccountNumber = @accountnumber or senderAccountNumber = @accountnumber";
            var cmd = new MySqlCommand(sqlQuery, DbConnection.Instance().Connection);

            cmd.Parameters.AddWithValue("@accountnumber", accountNumber);
            var transactionReader = cmd.ExecuteReader();

            while (transactionReader.Read())
            {
                YYTransaction transaction = new YYTransaction()
                {
                    Amount                = transactionReader.GetDecimal("amount"),
                    Content               = transactionReader.GetString("content"),
                    Id                    = transactionReader.GetString("id"),
                    Type                  = (YYTransaction.TransactionType)transactionReader.GetInt32("type"),
                    SenderAccountNumber   = transactionReader.GetString("senderAccountNumber"),
                    ReceiverAccountNumber = transactionReader.GetString("receiverAccountNumber"),
                    Status                = (YYTransaction.ActiveStatus)transactionReader.GetInt32("status"),
                    CreatedAt             = transactionReader.GetMySqlDateTime("createdAt").ToString()
                };
                list.Add(transaction);
            }

            DbConnection.Instance().CloseConnection();
            return(list);
        }
Пример #6
0
        public List <YYTransaction> getTransactionByAccountNumber(string accountNumber)
        {
            YYTransaction transaction    = null;
            var           lisTransaction = new List <YYTransaction>();
            var           queryString    = "select * from `accounts` where senderAccountNumber = @accountnumber or receiverAccountNumber = @accountnumber";
            MySqlCommand  cmd            = new MySqlCommand(queryString, DbConnection.Instance().Connection);

            cmd.Parameters.AddWithValue("@accountnumber", accountNumber);
            MySqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                transaction = new YYTransaction()
                {
                    Id                    = reader.GetString("id"),
                    CreatedAt             = reader.GetString("createAt"),
                    UpdatedAt             = reader.GetString("updateAt"),
                    Amount                = reader.GetDecimal("amount"),
                    Content               = reader.GetString("content"),
                    SenderAccountNumber   = reader.GetString("senderAccountNumber"),
                    ReceiverAccountNumber = reader.GetString("receiverAccountNumber"),
                    Type                  = (YYTransaction.TransactionType)reader.GetInt32("type"),
                    Status                = (YYTransaction.ActiveStatus)reader.GetInt32("status")
                };

                lisTransaction.Add(transaction);
            }


            return(lisTransaction);
        }
Пример #7
0
        public void Deposit()
        {
            Console.WriteLine("Deposit.");
            Console.WriteLine("---------------------------------");
            Console.WriteLine("Please enter amount to deposit: ");
            var amount = Utility.GetUnsignDecimalNumber();

            Console.WriteLine("Please enter message content: ");
            var content = Console.ReadLine();
//            Program.currentLoggedIn = model.GetAccountByUserName(Program.currentLoggedIn.Username);
            var historyTransaction = new YYTransaction
            {
                Id                    = Guid.NewGuid().ToString(),
                Type                  = YYTransaction.TransactionType.WITHDRAW,
                Amount                = amount,
                Content               = content,
                SenderAccountNumber   = Program.currentLoggedInYyAccount.AccountNumber,
                ReceiverAccountNumber = Program.currentLoggedInYyAccount.AccountNumber,
                Status                = YYTransaction.ActiveStatus.DONE
            };

            if (model.UpdateBalance(Program.currentLoggedInYyAccount, historyTransaction))
            {
                Console.WriteLine("Transaction success!");
            }
            else
            {
                Console.WriteLine("Transaction fails, please try again!");
            }
            Program.currentLoggedInYyAccount = model.GetByUsername(Program.currentLoggedInYyAccount.Username);
            Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance);
            Console.WriteLine("Press enter to continue!");
            Console.ReadLine();
        }
Пример #8
0
        public List <YYTransaction> GetTransactionByAccountNumber(string accountnumber)
        {
            List <YYTransaction> list = new List <YYTransaction>();

            DbConnection.Instance().OpenConnection();
            string queryString =
                "select * from `transactions` where senderAccountNumber = @accountnumber or receiverAccountNumber = @accountnumber";
            MySqlCommand command = new MySqlCommand(queryString, DbConnection.Instance().Connection);

            command.Parameters.AddWithValue("@accountnumber", accountnumber);
            MySqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                YYTransaction transaction = new YYTransaction()
                {
                    Id      = reader.GetString("id"),
                    Amount  = reader.GetDecimal("amount"),
                    Content = reader.GetString("content"),
                    Type    = (YYTransaction.TransactionType)reader.GetInt64("type"),
                    ReceiverAccountNumber = reader.GetString("receiverAccountNumber"),
                    SenderAccountNumber   = reader.GetString("senderAccountNumber"),
                    Status = (YYTransaction.ActiveStatus)reader.GetInt64("status")
                };
                list.Add(transaction);
            }

            DbConnection.Instance().CloseConnection();
            return(list);
        }
Пример #9
0
        public void Transfer()
        {
            DbConnection.Instance().OpenConnection(); // đảm bảo rằng đã kết nối đến db thành công.
            Console.WriteLine("Transfer.");
            Console.WriteLine("---------------------------------");
            Console.WriteLine("Please enter ReceiverAccountNumber: ");
            var accountNumber = Console.ReadLine();

            // 1. Lấy thông tin số dư mới nhất của tài khoản.
            DbConnection.Instance().OpenConnection();
            var queryString = "select * from `account` where accountNumber = @accountNumber";
            var cmd         = new MySqlCommand(queryString, DbConnection.Instance().Connection);

            cmd.Parameters.AddWithValue("@accountNumber", accountNumber);
            var reader  = cmd.ExecuteReader();
            var isExist = reader.Read();

            if (!isExist)
            {
                throw new SpringHeroTransactionException("Invalid accountNumber");
            }
            DbConnection.Instance().CloseConnection();
            Console.WriteLine("Please enter amount to transfer: ");
            var amount = Utility.GetUnsignDecimalNumber();

            Console.WriteLine("Please enter message content: ");
            var content            = Console.ReadLine();
            var historyTransaction = new YYTransaction
            {
                Id                    = Guid.NewGuid().ToString(),
                Type                  = YYTransaction.TransactionType.TRANSFER,
                Amount                = amount,
                Content               = content,
                SenderAccountNumber   = Program.currentLoggedInYyAccount.AccountNumber,
                ReceiverAccountNumber = accountNumber,
                Status                = YYTransaction.ActiveStatus.DONE
            };

            if (model.YTransaction(accountNumber, historyTransaction))
            {
                Console.WriteLine("Transaction success!");
            }
            else
            {
                Console.WriteLine("Transaction fails, please try again!");
            }

            Program.currentLoggedInYyAccount = model.GetByUsername(Program.currentLoggedInYyAccount.Username);
            Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance);
            Console.WriteLine("Press enter to continue!");
            Console.ReadLine();
        }
        // Giao dịch với
        public Boolean SaveTransaction(YYTransaction tr)
        {
            DbConnection.Instance().OpenConnection();
            string queryTransaction = "insert into `transaction`(amount,content,senderAccountNumber," +
                                      "receiverAccountNumber,type,status) " +
                                      "values(@val1,@val2,@val3,@val4,@val5,@val6)";
            MySqlCommand cmd = new MySqlCommand(queryTransaction, DbConnection.Instance().Connection);

            cmd.Parameters.AddWithValue("@val1", tr.Amount);
            cmd.Parameters.AddWithValue("@val2", tr.Content);
            cmd.Parameters.AddWithValue("@val3", tr.SenderAccountNumber);
            cmd.Parameters.AddWithValue("@val4", tr.ReceiverAccountNumber);
            cmd.Parameters.AddWithValue("@val5", tr.Type);
            cmd.Parameters.AddWithValue("@val6", tr.Status);
            cmd.ExecuteNonQuery();
            DbConnection.Instance().CloseConnection();
            return(true);
        }
Пример #11
0
        public void Transfer()
        {
            Console.WriteLine("Transfer.");
            Console.WriteLine("---------------------------------");
            Console.WriteLine("Please enter recever account number.");
            var receiverAccountNumber = Console.ReadLine();
            var checkAc = model.GetByAccountNumber(receiverAccountNumber);

            if (checkAc == null)
            {
                Console.WriteLine("Account does not exist");
            }
            Console.WriteLine("Full Name: " + checkAc.FullName);
            Console.WriteLine("Please enter amount to transfer: ");
            var amount = Utility.GetDecimalNumber();

            if (amount > Program.currentLoggedInYyAccount.Balance)
            {
                Console.WriteLine("Input balances can not be executed. Please retype.");
            }
            Console.WriteLine("Please enter message content: ");
            var content            = Console.ReadLine();
            var historyTransaction = new YYTransaction()
            {
                Id                    = Guid.NewGuid().ToString(),
                Type                  = YYTransaction.TransactionType.TRANSFER,
                Amount                = amount,
                Content               = content,
                SenderAccountNumber   = Program.currentLoggedInYyAccount.AccountNumber,
                ReceiverAccountNumber = receiverAccountNumber,
                Status                = YYTransaction.ActiveStatus.DONE
            };

            if (model.UpdateTranfers(Program.currentLoggedInYyAccount.AccountNumber, receiverAccountNumber, historyTransaction))
            {
                Console.WriteLine("Transaction success!");
            }
            else
            {
                Console.WriteLine("Transaction fails, please try again!");
            }
            Program.currentLoggedInYyAccount = model.GetByAccountNumber(Program.currentLoggedInYyAccount.AccountNumber);
            Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance);
        }
Пример #12
0
        public void Withdraw()
        {
            Console.WriteLine("Withdraw.");
            Console.WriteLine("---------------------------------");
            Console.WriteLine("Please enter amount to transfer: ");
            var amount        = Utility.GetUnsignDecimalNumber();
            var currentBlance = Program.currentLoggedInYyAccount.Balance;

            // 2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw.
            if (amount > currentBlance)
            {
                throw new SpringHeroTransactionException("Not enough money!");
            }

            Console.WriteLine("Please enter message content: ");
            var content = Console.ReadLine();
//            Program.currentLoggedIn = model.GetAccountByUserName(Program.currentLoggedIn.Username);
            var historyTransaction = new YYTransaction
            {
                Id                    = Guid.NewGuid().ToString(),
                Type                  = YYTransaction.TransactionType.DEPOSIT,
                Amount                = amount,
                Content               = content,
                SenderAccountNumber   = Program.currentLoggedInYyAccount.AccountNumber,
                ReceiverAccountNumber = Program.currentLoggedInYyAccount.AccountNumber,
                Status                = YYTransaction.ActiveStatus.DONE
            };

            if (model.UpdateBalance(Program.currentLoggedInYyAccount, historyTransaction))
            {
                Console.WriteLine("Transaction success!");
            }
            else
            {
                Console.WriteLine("Transaction fails, please try again!");
            }

            Program.currentLoggedInYyAccount = model.GetByUsername(Program.currentLoggedInYyAccount.Username);
            Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance);
            Console.WriteLine("Press enter to continue!");
            Console.ReadLine();
        }
Пример #13
0
        public void Trasaction(String anumber)
        {
            YYTransaction        tr  = new YYTransaction();
            YYTransactionHistory th1 = new YYTransactionHistory();
            YYTransactionHistory th2 = new YYTransactionHistory();

            Console.WriteLine("Please enter import amount to transfer: ");
            tr.Amount = Decimal.Parse(Console.ReadLine());
            Console.WriteLine("Please enter content: ");
            tr.Content             = Console.ReadLine();
            tr.SenderAccountNumber = anumber;
            Console.WriteLine("Please enter receiver account number");
            tr.ReceiverAccountNumber = Console.ReadLine();
            var    checkAc = _model.GetByAccountNumber(tr.ReceiverAccountNumber);
            String rac     = checkAc.AccountNumber;

            if (rac.Equals(tr.ReceiverAccountNumber))
            {
                Console.WriteLine("Please enter type: ");
                tr.Type = Int32.Parse(Console.ReadLine());
                Console.WriteLine("Please enter status: ");
                tr.Status = Int32.Parse(Console.ReadLine());
                _tras.SaveTransaction(tr);
                _model.WithdrawalBalance(tr.Amount, anumber);
                _model.DepositBalance(tr.Amount, tr.ReceiverAccountNumber);
                th1.AccountNumber       = anumber;
                th1.Type                = 3;
                th1.Amount              = tr.Amount;
                th1.TradingAcountNumber = tr.ReceiverAccountNumber;

                th2.AccountNumber       = tr.ReceiverAccountNumber;
                th2.Type                = 3;
                th2.Amount              = tr.Amount;
                th2.TradingAcountNumber = anumber;
                _history.HinsertBalance(th1);
                _history.HinsertBalance(th2);
            }
            else
            {
                Console.WriteLine("This account does not exist.");
            }
        }
Пример #14
0
        /*
         * Tiến hành chuyển khoản, mặc định là trong ngân hàng.
         * 1. Yêu cầu nhập số tài khoản cần chuyển.(số tài khoản của người nhận.)
         *     1.1. Xác minh thông tin tài khoản và hiển thị tên người cần chuyển.
         * 2. Nhập số tiền cần chuyển.
         *     2.1. Kiểm tra số dư tài khoản.
         * 3. Nhập nội dung chuyển tiền.
         *     3.1 Xác nhận nội dung chuyển tiền.
         * 4. Thực hiện chuyển tiền.
         *     4.1. Mở transaction. Mở block try catch.
         *     4.2. Trừ tiền người gửi.
         *         4.2.1. Lấy thông tin tài khoản gửi tiền một lần nữa. Đảm bảo thông tin là mới nhất.
         *         4.2.2. Kiểm tra lại một lần nữa số dư xem có đủ tiền để chuyển không.
         *             4.2.2.1. Nếu không đủ thì rollback.
         *             4.2.2.2. Nếu đủ thì trừ tiền và update vào bảng `accounts`.
         *     4.3. Cộng tiền người nhận.
         *         4.3.1. Lấy thông tin tài khoản nhận, đảm bảo tài khoản không bị khoá hoặc inactive.
         *         4.3.1.1. Nếu ok thì update số tiền cho người nhận.
         *         4.3.1.2. Nếu không ok thì rollback.
         *     4.4. Lưu lịch sử giao dịch.
         *     4.5. Kiểm tra lại trạng thái của 3 câu lệnh trên.
         *         4.5.1. Nếu cả 3 cùng thành công thì commit transaction.
         *         4.5.2. Nếu bất kỳ một câu lệnh nào bị lỗi thì rollback.
         *     4.x. Đóng, commit transaction.
         */
        public void Transfer()
        {
            Console.WriteLine("Enter the account number to transfer: ");
            var accountNumber   = Console.ReadLine();
            var receiverAccount = model.GetByAccountNumber(accountNumber);

            if (receiverAccount == null)
            {
                Console.WriteLine("Invalid account information");
                return;
            }

            Console.WriteLine("Name of person to transfer: " + receiverAccount.Name);
            Console.WriteLine("Enter amount to transfer: ");
            var amount = Utillty.GetDecimalNumber();

            Console.WriteLine("Please enter message content: ");
            var content = Console.ReadLine();
//            Program.currentLoggedIn = model.GetAccountByUserName(Program.currentLoggedIn.Username);
            var historyTransaction = new YYTransaction()
            {
                Id                    = Guid.NewGuid().ToString(),
                Type                  = YYTransaction.TransactionType.TRANSFER,
                Amount                = amount,
                Content               = content,
                SenderAccountNumber   = Program.currentLoggedInYyAccount.AccountNumber,
                ReceiverAccountNumber = accountNumber,
                Status                = YYTransaction.ActiveStatus.DONE
            };

            if (model.Transfer(Program.currentLoggedInYyAccount, historyTransaction))
            {
                Console.WriteLine("Transaction success!");
            }
            else
            {
                Console.WriteLine("Transaction fails, please try again!");
            }

            Program.currentLoggedInYyAccount = model.GetByAccountNumber(Program.currentLoggedInYyAccount.AccountNumber);
            Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance);
        }
        public List <YYTransaction> GetTransactionsByDate(string fromDate, string toDate)
        {
            List <YYTransaction> list          = new List <YYTransaction>();
            YYTransaction        yyTransaction = null;

            DbConnection.Instance().OpenConnection();
            var queryString = "select * from `transactions` where created_date < @toDate and created_date > @fromDate";
            var cmd         = new MySqlCommand(queryString, DbConnection.Instance().Connection);

            cmd.Parameters.AddWithValue("@fromDate", fromDate);
            cmd.Parameters.AddWithValue("@toDate", toDate);
            var reader  = cmd.ExecuteReader();
            var isExist = reader.Read();

            if (!isExist)
            {
                Console.WriteLine("Not record is finded");
            }

            while (reader.Read())
            {
                yyTransaction         = new YYTransaction();
                yyTransaction.Id      = reader.GetString("id");
                yyTransaction.Type    = (YYTransaction.TransactionType)reader.GetInt32("type");
                yyTransaction.Amount  = reader.GetDecimal("amount");
                yyTransaction.Content = reader.GetString("content");
                yyTransaction.ReceiverAccountNumber = reader.GetString("receiverAccountNumber");
                yyTransaction.SenderAccountNumber   = reader.GetString("senderAccountNumber");
                DateTime time = reader.GetDateTime("created_date");
                string   date = time.ToLongDateString();
                yyTransaction.CreatedAt = date;
                list.Add(yyTransaction);
            }

            DbConnection.Instance().CloseConnection();
            return(list);
        }
Пример #16
0
        public bool UpdateTranfers(string senderAccountNumber, string receiverAccountNumber,
                                   YYTransaction historyTransaction)
        {
            DbConnection.Instance().OpenConnection();
            var transaction = DbConnection.Instance().Connection.BeginTransaction();

            try
            {
                // 1. Lấy thông tin số dư mới nhất của tài khoản gửi.
                var queryBalance =
                    "select balance from `accounts` where accountNumber = @senderAccountNumber and status = 1";
                MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection);
                queryBalanceCommand.Parameters.AddWithValue("@senderAccountNumber", senderAccountNumber);
                var balanceReader = queryBalanceCommand.ExecuteReader();
                var isExist       = balanceReader.Read();
                if (!isExist)
                {
                    throw new SpringHeroTransactionException("Invalid accountNumber");
                }

                var currentBalance = balanceReader.GetDecimal("balance");
                balanceReader.Close();
                if (historyTransaction.Type != YYTransaction.TransactionType.TRANSFER)
                {
                    throw new SpringHeroTransactionException("Invalid transaction type!");
                }

                if (historyTransaction.Type == YYTransaction.TransactionType.TRANSFER &&
                    historyTransaction.Amount > currentBalance)
                {
                    throw new SpringHeroTransactionException("Not enough money!");
                }

                //1. Lấy thông tin số dư mới nhất của tài khoản người nhận
                var queryBalanceReceiver =
                    "select balance from `accounts` where accountNumber = @receiverAccountNumber and status = 1";
                MySqlCommand queryBalanceCommandReceiver = new MySqlCommand(queryBalanceReceiver, DbConnection.Instance().Connection);
                queryBalanceCommandReceiver.Parameters.AddWithValue("@receiverAccountNumber", receiverAccountNumber);
                var balanceReaderReceiver = queryBalanceCommandReceiver.ExecuteReader();
                var isExistReceiver       = balanceReaderReceiver.Read();
                if (!isExistReceiver)
                {
                    throw new SpringHeroTransactionException("Invalid accountNumber");
                }

                var currentBalanceReceiver = balanceReaderReceiver.GetDecimal("balance");
                balanceReaderReceiver.Close();
                if (historyTransaction.Type != YYTransaction.TransactionType.TRANSFER)
                {
                    throw new SpringHeroTransactionException("Invalid transaction type!");
                }

                //2. Tính toán lại số tiền tài khoản người gửi và người nhận.
                if (historyTransaction.Type == YYTransaction.TransactionType.TRANSFER)
                {
                    currentBalance         -= historyTransaction.Amount;
                    currentBalanceReceiver += historyTransaction.Amount;
                }

                // 3. Update số dư vào dat1abase tài khoản người gửi.
                var updateAccountsender      = 0;
                var queryUpdateAccountsender =
                    "update `accounts` set balance = @balance where accountNumber = @senderAccountNumber and status = 1";
                var cmdUpdateAccountsender =
                    new MySqlCommand(queryUpdateAccountsender, DbConnection.Instance().Connection);
                cmdUpdateAccountsender.Parameters.AddWithValue("@senderAccountNumber", senderAccountNumber);
                cmdUpdateAccountsender.Parameters.AddWithValue("@balance", currentBalance);
                updateAccountsender = cmdUpdateAccountsender.ExecuteNonQuery();

                // 4. Update  số dư vào dat1abase tài khoản người nhận.
                var updateAccountreceiver      = 0;
                var queryUpdateAccountreceiver =
                    "update `accounts` set balance = @balance where accountNumber = @receiverAccountNumber and status = 1";
                var cmdUpdateAccountreceiver =
                    new MySqlCommand(queryUpdateAccountreceiver, DbConnection.Instance().Connection);
                cmdUpdateAccountreceiver.Parameters.AddWithValue("@receiverAccountNumber", receiverAccountNumber);
                cmdUpdateAccountreceiver.Parameters.AddWithValue("@balance", currentBalanceReceiver);
                updateAccountreceiver = cmdUpdateAccountreceiver.ExecuteNonQuery();

                // 5. Lưu thông tin transaction vào bảng transaction.
                var insertTransactionResult = 0;
                var queryInsertTransaction  = "insert into `transactions` " +
                                              "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " +
                                              "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)";
                var cmdInsertTransaction =
                    new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection);
                cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id);
                cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type);
                cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount);
                cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content);
                cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber",
                                                             historyTransaction.SenderAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber",
                                                             historyTransaction.ReceiverAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status);
                insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery();
                if (updateAccountsender == 1 && updateAccountreceiver == 1 && insertTransactionResult == 1)
                {
                    transaction.Commit();
                    return(true);
                }
            }
            catch (SpringHeroTransactionException e)
            {
                transaction.Rollback();
                return(false);
            }

            DbConnection.Instance().CloseConnection();
            return(false);
        }
Пример #17
0
        public bool Tranfer(YYAccount currentLoggedInYyAccount, YYTransaction historyTransaction)
        {
            DbConnection.Instance().OpenConnection(); // đảm bảo rằng đã kết nối đến db thành công.
            var transaction = DbConnection.Instance().Connection.BeginTransaction();

            try
            {
                // 1. Lấy thông tin số dư mới nhất của tài khoản.
                var queryBalance =
                    "select balance from `accounts` where accountnumber = @accountnumber and status = @status";
                MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection);
                queryBalanceCommand.Parameters.AddWithValue("@accountnumber", currentLoggedInYyAccount.AccountNumber);
                queryBalanceCommand.Parameters.AddWithValue("@status", currentLoggedInYyAccount.Status);
                var balanceReader = queryBalanceCommand.ExecuteReader();
                // Không tìm thấy tài khoản tương ứng, throw lỗi.
                if (!balanceReader.Read())
                {
                    // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false.
                    // Hàm dừng tại đây.
                    throw new SpringHeroTransactionException("Invalid username");
                }

                // Đảm bảo sẽ có bản ghi.
                var currentBalance = balanceReader.GetDecimal("balance");
                balanceReader.Close();

                if (historyTransaction.Amount > currentBalance)
                {
                    throw new SpringHeroTransactionException("Not enough money!");
                }

                currentBalance -= historyTransaction.Amount;

                var updateAccountResult       = 0;
                var queryUpdateAccountBalance =
                    "update `accounts` set balance = @balance where accountnumber = @accountnumber and status = 1";
                var cmdUpdateAccountBalance =
                    new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@accountnumber",
                                                                currentLoggedInYyAccount.AccountNumber);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance);
                updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery();


                var queryBalanceRecever =
                    "select balance from `accounts` where accountnumber = @accountnumber and status = @status";
                MySqlCommand queryBalanceCommandRecever =
                    new MySqlCommand(queryBalanceRecever, DbConnection.Instance().Connection);
                queryBalanceCommandRecever.Parameters.AddWithValue("@accountnumber",
                                                                   historyTransaction.ReceiverAccountNumber);
                queryBalanceCommandRecever.Parameters.AddWithValue("@status", currentLoggedInYyAccount.Status);
                var balanceReaderRecever = queryBalanceCommandRecever.ExecuteReader();


                if (!balanceReaderRecever.Read())
                {
                    // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false.
                    // Hàm dừng tại đây.
                    throw new SpringHeroTransactionException("Invalid username");
                }

                // Đảm bảo sẽ có bản ghi.
                var currentBalanceRecever = balanceReaderRecever.GetDecimal("balance");
                balanceReaderRecever.Close();

                if (historyTransaction.Amount > currentBalanceRecever)
                {
                    throw new SpringHeroTransactionException("Not enough money!");
                }

                currentBalanceRecever += historyTransaction.Amount;

                var updateAccountResultRecever       = 0;
                var queryUpdateAccountBalanceRecever =
                    "update `accounts` set balance = @balance where accountnumber = @accountnumber and status = 1";
                var cmdUpdateAccountBalanceRecever =
                    new MySqlCommand(queryUpdateAccountBalanceRecever, DbConnection.Instance().Connection);
                cmdUpdateAccountBalanceRecever.Parameters.AddWithValue("@accountnumber",
                                                                       historyTransaction.ReceiverAccountNumber);
                cmdUpdateAccountBalanceRecever.Parameters.AddWithValue("@balance", currentBalanceRecever);
                updateAccountResultRecever = cmdUpdateAccountBalanceRecever.ExecuteNonQuery();


                // 4. Lưu thông tin transaction vào bảng transaction.
                var insertTransactionResult = 0;
                var queryInsertTransaction  = "insert into `transactions` " +
                                              "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " +
                                              "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)";
                var cmdInsertTransaction =
                    new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection);
                cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id);
                cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type);
                cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount);
                cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content);
                cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber",
                                                             historyTransaction.SenderAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber",
                                                             historyTransaction.ReceiverAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status);
                insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery();

                if (updateAccountResult == 1 && insertTransactionResult == 1 && updateAccountResultRecever == 1)
                {
                    transaction.Commit();
                    return(true);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }


            return(true);
        }
Пример #18
0
        public bool UpdateBalance(YYAccount account, YYTransaction historyTransaction)
        {
            DbConnection.Instance().OpenConnection();                                // đảm bảo rằng đã kết nối đến db thành công.
            var transaction = DbConnection.Instance().Connection.BeginTransaction(); // Khởi tạo transaction.

            try
            {
                /**
                 * 1. Lấy thông tin số dư mới nhất của tài khoản.
                 * 2. Kiểm tra kiểu transaction. Chỉ chấp nhận deposit và withdraw.
                 *     2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw.
                 * 3. Update số dư vào tài khoản.
                 *     3.1. Tính toán lại số tiền trong tài khoản.
                 *     3.2. Update số tiền vào database.
                 * 4. Lưu thông tin transaction vào bảng transaction.
                 */

                // 1. Lấy thông tin số dư mới nhất của tài khoản.
                var          queryBalance        = "select balance from `accounts` where username = @username and status = @status";
                MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection);
                queryBalanceCommand.Parameters.AddWithValue("@username", account.Username);
                queryBalanceCommand.Parameters.AddWithValue("@status", account.Status);
                var balanceReader = queryBalanceCommand.ExecuteReader();
                // Không tìm thấy tài khoản tương ứng, throw lỗi.
                if (!balanceReader.Read())
                {
                    // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false.
                    // Hàm dừng tại đây.
                    throw new SpringHeroTransactionException("Invalid username");
                }

                // Đảm bảo sẽ có bản ghi.
                var currentBalance = balanceReader.GetDecimal("balance");
                balanceReader.Close();

                // 2. Kiểm tra kiểu transaction. Chỉ chấp nhận deposit và withdraw.
                if (historyTransaction.Type != YYTransaction.TransactionType.DEPOSIT &&
                    historyTransaction.Type != YYTransaction.TransactionType.WITHDRAW)
                {
                    throw new SpringHeroTransactionException("Invalid transaction type!");
                }

                // 2.1. Kiểm tra số tiền rút nếu kiểu transaction là withdraw.
                if (historyTransaction.Type == YYTransaction.TransactionType.WITHDRAW &&
                    historyTransaction.Amount > currentBalance)
                {
                    throw new SpringHeroTransactionException("Not enough money!");
                }

                // 3. Update số dư vào tài khoản.
                // 3.1. Tính toán lại số tiền trong tài khoản.
                if (historyTransaction.Type == YYTransaction.TransactionType.DEPOSIT)
                {
                    currentBalance -= historyTransaction.Amount;
                }
                else
                {
                    currentBalance
                        += historyTransaction.Amount;
                }

                // 3.2. Update số dư vào database.
                var updateAccountResult       = 0;
                var queryUpdateAccountBalance =
                    "update `accounts` set balance = @balance where username = @username and status = 1";
                var cmdUpdateAccountBalance =
                    new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@username", account.Username);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance);
                updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery();

                // 4. Lưu thông tin transaction vào bảng transaction.
                var insertTransactionResult = 0;
                var queryInsertTransaction  = "insert into `transactions` " +
                                              "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " +
                                              "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)";
                var cmdInsertTransaction =
                    new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection);
                cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id);
                cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type);
                cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount);
                cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content);
                cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber",
                                                             historyTransaction.SenderAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber",
                                                             historyTransaction.ReceiverAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status);
                insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery();

                if (updateAccountResult == 1 && insertTransactionResult == 1)
                {
                    transaction.Commit();
                    return(true);
                }
            }
            catch (SpringHeroTransactionException e)
            {
                transaction.Rollback();
                return(false);
            }

            DbConnection.Instance().CloseConnection();
            return(false);
        }
Пример #19
0
        public bool TransferAmount(YYAccount account, YYTransaction historyTransaction)
        {
            DbConnection.Instance().OpenConnection();
            var transaction = DbConnection.Instance().Connection.BeginTransaction();

            try
            {
                // Kiểm tra số tài khoản mới nhất
                var          queryBalance        = "select `balance` from `account` where username = @username and status = 1";
                MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection);
                queryBalanceCommand.Parameters.AddWithValue("@username", account.Username);
                var balanceReader = queryBalanceCommand.ExecuteReader();
                // Không tìm thấy tài khoản tương ứng, throw lỗi.
                if (!balanceReader.Read())
                {
                    throw new TransactionException("Invalid username");
                }

                var currentBalance = balanceReader.GetDecimal("balance");
                currentBalance -= historyTransaction.Amount;
                balanceReader.Close();

                // Update số dư vào database.
                var updateAccountResult       = 0;
                var queryUpdateAccountBalance =
                    "update `account` set balance = @balance where username = @username and status = 1";
                var cmdUpdateAccountBalance =
                    new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@username", account.Username);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance);
                updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery();

                // Lưu thông tin transaction vào bảng transaction.
                var insertTransactionResult = 0;
                var queryInsertTransaction  = "insert into `transaction` " +
                                              "(id, fromAccountNumber, amount, content, toAccountNumber, type, status) " +
                                              "values (@id, @fromAccountNumber, @amount, @content, @toAccountNumber, @type, @status)";
                var cmdInsertTransaction =
                    new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection);
                cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id);
                cmdInsertTransaction.Parameters.AddWithValue("@fromAccountNumber", historyTransaction.SenderAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount);
                cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content);
                cmdInsertTransaction.Parameters.AddWithValue("@toAccountNumber", historyTransaction.ReceiverAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type);
                cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status);
                insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery();

                // Kiểm tra lại câu lệnh
                if (updateAccountResult == 1 && insertTransactionResult == 1)
                {
                    transaction.Commit();
                    return(true);
                }
            }
            catch (TransactionException e)
            {
                transaction.Rollback();
                return(false);
            }

            DbConnection.Instance().CloseConnection();
            return(false);
        }
Пример #20
0
        /* * Tiến hành chuyển khoản, mặc định là trong ngân hàng.
         * 1. Yêu cầu nhập số tài khoản cần chuyển.
         *     1.1. Xác minh thông tin tài khoản và hiển thị tên người cần chuyển.
         * 2. Nhập số tiền cần chuyển.
         *     2.1. Kiểm tra số dư tài khoản.
         * 3. Nhập nội dung chuyển tiền.
         *     3.1 Xác nhận nội dung chuyển tiền.
         * 4. Thực hiện chuyển tiền.
         *     4.1. Mở transaction. Mở block try catch.
         *     4.2. Trừ tiền người gửi.
         *         4.2.1. Lấy thông tin tài khoản gửi tiền một lần nữa. Đảm bảo thông tin là mới nhất.
         *         4.2.2. Kiểm tra lại một lần nữa số dư xem có đủ tiền để chuyển không.
         *             4.2.2.1. Nếu không đủ thì rollback.
         *             4.2.2.2. Nếu đủ thì trừ tiền và update vào bảng `accounts`.
         *     4.3. Cộng tiền người nhận.
         *         4.3.1. Lấy thông tin tài khoản nhận, đảm bảo tài khoản không bị khoá hoặc inactive.
         *         4.3.1.1. Nếu ok thì update số tiền cho người nhận.
         *         4.3.1.2. Nếu không ok thì rollback.
         *     4.4. Lưu lịch sử giao dịch.
         *     4.5. Kiểm tra lại trạng thái của 3 câu lệnh trên.
         *         4.5.1. Nếu cả 3 cùng thành công thì commit transaction.
         *         4.5.2. Nếu bất kỳ một câu lệnh nào bị lỗi thì rollback.
         *     4.x. Đóng, commit transaction.
         */
        public void Transfer()
        {
            Console.WriteLine("------------------Transerf Information-------------------");
            var accountNumber = "8ae77d16-4ef7-4e3b-8620-89a794030923";
            var account       = model.GetByAccountNumber(accountNumber);

            if (account == null)
            {
                Console.WriteLine("Invalid account info ");
                return;
            }

            Console.WriteLine("You are doing transaction with account :" + account.FullName);
            Console.WriteLine("enter amout to transfer");
            var amount = Utility.GetDecimalNumber();

            if (amount > account.Balance)

            {
                Console.WriteLine("Amout not enough to perfom transaction:");
                return;
            }

            amount += account.Balance;

            Console.WriteLine("Please enter message conten:");
            var content = Console.ReadLine();

            Console.WriteLine("Are you sure you want to make a transaction with your account ? (y/n)");
            var choice = Console.ReadLine();

            if (choice.Equals("n"))
            {
                return;
            }

            var historyTransaction = new YYTransaction()
            {
                Id                    = Guid.NewGuid().ToString(),
                Type                  = 4,
                Content               = content,
                Amount                = amount,
                SenderAccountNumber   = Program.currentLoggedInYyAccount.AccountNumber,
                ReceiverAccountNumber = account.AccountNumber,
                Status                = 2,
            };

            if (model.TransferAmount(Program.currentLoggedInYyAccount, historyTransaction))
            {
                Console.WriteLine("Transaction success!");
            }
            else
            {
                Console.WriteLine("Transaction fails, please try again!");
            }


            Program.currentLoggedInYyAccount = model.GetByUsername(Program.currentLoggedInYyAccount.Username);
            Console.WriteLine("Current balance: " + Program.currentLoggedInYyAccount.Balance);
            Console.WriteLine("Press enter to continue!");
            Console.ReadLine();
        }
Пример #21
0
        public bool YTransaction(String trecieverAccount, YYTransaction historyTransaction)
        {
            DbConnection.Instance().OpenConnection();                                // đảm bảo rằng đã kết nối đến db thành công.
            var transaction = DbConnection.Instance().Connection.BeginTransaction(); // Khởi tạo transaction.

            try
            {
                //4.2 Trừ tiền người gửi.

                //4.2.1. Lấy thông tin số dư mới nhất của tài khoản.
                var          queryBalance        = "select balance from `account` where accountNumber = @accountNumber and status = 1";
                MySqlCommand queryBalanceCommand = new MySqlCommand(queryBalance, DbConnection.Instance().Connection);
                queryBalanceCommand.Parameters.AddWithValue("@accountNumber",
                                                            Program.currentLoggedInYyAccount.AccountNumber);
                var balanceReader = queryBalanceCommand.ExecuteReader();
                // Không tìm thấy tài khoản tương ứng, throw lỗi.
                if (!balanceReader.Read())
                {
                    // Không tồn tại bản ghi tương ứng, lập tức rollback transaction, trả về false.
                    // Hàm dừng tại đây.
                    throw new SpringHeroTransactionException("Invalid username");
                }

                // Đảm bảo sẽ có bản ghi.
                var currentBalance = balanceReader.GetDecimal("balance");
                balanceReader.Close();
                //4.2.2 Kiểm tra số tiền chuyen di.
                if (historyTransaction.Amount > currentBalance)
                {
                    throw new SpringHeroTransactionException("Not enough money!");
                }

                //4.3. Update số dư vào tài khoản.
                //4.3.1. Tính toán lại số tiền trong tài khoản.
                currentBalance -= historyTransaction.Amount;
                //4.3.2. Update số dư vào database.
                var updateAccountResult       = 0;
                var queryUpdateAccountBalance =
                    "update `account` set balance = @balance where accountNumber = @accountNumber and status = 1";
                var cmdUpdateAccountBalance =
                    new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@accountNumber",
                                                                Program.currentLoggedInYyAccount.AccountNumber);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@balance", currentBalance);
                updateAccountResult = cmdUpdateAccountBalance.ExecuteNonQuery();
                //4.4 Cong tien nguoi nhan
                //4.4.1  Lấy thông tin tài khoản nhận, đảm bảo tài khoản không bị khoá hoặc inactive.
                var queryString = "select * from `account` where accountNumber = @accountNumberR";
                var cmd         = new MySqlCommand(queryString, DbConnection.Instance().Connection);
                cmd.Parameters.AddWithValue("@accountNumberR", trecieverAccount);
                var reader  = cmd.ExecuteReader();
                var isExist = reader.Read();
                if (!isExist)
                {
                    throw new SpringHeroTransactionException("Invalid username");
                }

                var fullname = reader.GetString("fullName");
                Console.WriteLine(fullname);
                var accountReciverBalance = reader.GetDecimal("balance");
                accountReciverBalance += historyTransaction.Amount;
                reader.Close();
                //4.4.2 Update số dư vào database.
                var updateAccountReciver = 0;
                var queryUpdateAccountBalancReciveiver =
                    "update `account` set balance = @balanceR where accountNumber = @accountR and status = 1";
                var cmdUpdateAccountBalanceRecieve =
                    new MySqlCommand(queryUpdateAccountBalance, DbConnection.Instance().Connection);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@accountR", trecieverAccount);
                cmdUpdateAccountBalance.Parameters.AddWithValue("@balanceR", accountReciverBalance);
                updateAccountReciver = cmdUpdateAccountBalanceRecieve.ExecuteNonQuery();
                // 4.5 Lưu thông tin transaction vào bảng transaction.
                var insertTransactionResult = 0;
                var queryInsertTransaction  = "insert into `transactions` " +
                                              "(id, type, amount, content, senderAccountNumber, receiverAccountNumber, status) " +
                                              "values (@id, @type, @amount, @content, @senderAccountNumber, @receiverAccountNumber, @status)";
                var cmdInsertTransaction = new MySqlCommand(queryInsertTransaction, DbConnection.Instance().Connection);
                cmdInsertTransaction.Parameters.AddWithValue("@id", historyTransaction.Id);
                cmdInsertTransaction.Parameters.AddWithValue("@type", historyTransaction.Type);
                cmdInsertTransaction.Parameters.AddWithValue("@amount", historyTransaction.Amount);
                cmdInsertTransaction.Parameters.AddWithValue("@content", historyTransaction.Content);
                cmdInsertTransaction.Parameters.AddWithValue("@senderAccountNumber",
                                                             historyTransaction.SenderAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@receiverAccountNumber",
                                                             historyTransaction.ReceiverAccountNumber);
                cmdInsertTransaction.Parameters.AddWithValue("@status", historyTransaction.Status);
                insertTransactionResult = cmdInsertTransaction.ExecuteNonQuery();

                if (updateAccountResult == 1 && updateAccountReciver == 1 && insertTransactionResult == 1)
                {
                    transaction.Commit();
                    return(true);
                }
            }
            catch (SpringHeroTransactionException e)
            {
                transaction.Rollback();
                return(false);
            }

            DbConnection.Instance().CloseConnection();
            return(false);
        }