From ab1804176c4da7c0065466e70c601e9bea966bd2 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Tue, 21 Jan 2020 10:52:44 +0100 Subject: [PATCH 01/21] Transaction History Store --- BankAccount/pkg/store/transactionhistory.go | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index 72440ea..113e153 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -1 +1,46 @@ package store + +import ( + "bankacc/pkg/config" + "bankacc/pkg/entities" + "database/sql" +) + +type TransactionHistoryStore interface { + Insert() +} + +type TransactionHistoryModel struct { + Db *sql.DB +} + +func NewTransactionHistoryStoreModel(db *sql.DB) *TransactionHistoryModel { + return &TransactionHistoryModel{ + Db: db, + } +} + +func (store *TransactionHistoryModel) Insert(UserId int, AccountId int, Amount float64, Action string, Created string) (*entities.TransactionHistory, error) { + db, err := config.GetMySQLDB() + if err != nil { + return nil, err + } else { + TransactionModel := TransactionHistoryModel{ + Db: db, + } + + transaction := entities.TransactionHistory{ + UserId: UserId, + AccountId: AccountId, + Amount: Amount, + Action: Action, + Created: Created, + } + _, err := TransactionModel.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", UserId, AccountId, Amount, Action, Created) + + if err != nil { + return nil, err + } + return &transaction, nil + } +} From d2152e5276f3eb8f571ab358974ae68aa0fefa5c Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Tue, 21 Jan 2020 11:17:04 +0100 Subject: [PATCH 02/21] Transaction History Store Insert --- BankAccount/pkg/store/transactionhistory.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index 113e153..c70f646 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -7,7 +7,7 @@ import ( ) type TransactionHistoryStore interface { - Insert() + Insert(UserId int, AccountId int, Amount float64, Action string, Created string) (*entities.TransactionHistory, error) } type TransactionHistoryModel struct { From a89ce212f530aa77a0dc29a9fcb7c202da56f84a Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Tue, 21 Jan 2020 13:37:26 +0100 Subject: [PATCH 03/21] Transaction History Store GetTransactionsById --- BankAccount/pkg/store/transactionhistory.go | 60 +++++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index c70f646..05f4de3 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -7,7 +7,9 @@ import ( ) type TransactionHistoryStore interface { - Insert(UserId int, AccountId int, Amount float64, Action string, Created string) (*entities.TransactionHistory, error) + Insert(UserId int, AccountId int, Amount float64, Action string, CreatedAt string) (*entities.TransactionHistory, error) + GetTransactionsById(Id int) (*[]entities.TransactionHistory, error) + GetTransactionsByIdFromToDate(Id int, FromDate string, ToDate string) (*[]entities.TransactionHistory, error) } type TransactionHistoryModel struct { @@ -20,7 +22,7 @@ func NewTransactionHistoryStoreModel(db *sql.DB) *TransactionHistoryModel { } } -func (store *TransactionHistoryModel) Insert(UserId int, AccountId int, Amount float64, Action string, Created string) (*entities.TransactionHistory, error) { +func (store *TransactionHistoryModel) Insert(UserId int, AccountId int, Amount float64, Action string, CreatedAt string) (*entities.TransactionHistory, error) { db, err := config.GetMySQLDB() if err != nil { return nil, err @@ -34,9 +36,9 @@ func (store *TransactionHistoryModel) Insert(UserId int, AccountId int, Amount f AccountId: AccountId, Amount: Amount, Action: Action, - Created: Created, + CreatedAt: CreatedAt, } - _, err := TransactionModel.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", UserId, AccountId, Amount, Action, Created) + _, err := TransactionModel.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", UserId, AccountId, Amount, Action, CreatedAt) if err != nil { return nil, err @@ -44,3 +46,53 @@ func (store *TransactionHistoryModel) Insert(UserId int, AccountId int, Amount f return &transaction, nil } } + +func (store *TransactionHistoryModel) GetTransactionsById(Id int) (*[]entities.TransactionHistory, error) { + var transactions []entities.TransactionHistory + db, err := config.GetMySQLDB() + if err != nil { + return nil, err + } else { + TransactionModel := TransactionHistoryModel{ + Db: db, + } + result, err := TransactionModel.Db.Query("SELECT * FROM BankAccount.TransactionHistory WHERE user_id = ?", Id) + if err != nil { + return nil, err + } + var transaction entities.TransactionHistory + for result.Next() { + err := result.Scan(&transaction.Id, &transaction.UserId, &transaction.AccountId, &transaction.Amount, &transaction.Action, &transaction.CreatedAt) + if err != nil { + return nil, err + } + transactions = append(transactions, transaction) + } + return &transactions, nil + } +} + +func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(Id int, FromDate string, ToDate string) (*[]entities.TransactionHistory, error) { + var transactions []entities.TransactionHistory + db, err := config.GetMySQLDB() + if err != nil { + return nil, err + } else { + TransactionModel := TransactionHistoryModel{ + Db: db, + } + result, err := TransactionModel.Db.Query("SELECT * FROM BankAccount.TransactionHistory WHERE user_id = ? and created_at between ? and ?", Id, FromDate, ToDate) + if err != nil { + return nil, err + } + var transaction entities.TransactionHistory + for result.Next() { + err := result.Scan(&transaction.Id, &transaction.UserId, &transaction.AccountId, &transaction.Amount, &transaction.Action, &transaction.CreatedAt) + if err != nil { + return nil, err + } + transactions = append(transactions, transaction) + } + return &transactions, nil + } +} From 2bf4a20db3f522f6885004ae056cad9fe888631c Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Tue, 21 Jan 2020 13:49:48 +0100 Subject: [PATCH 04/21] Formatted code and updated variables --- BankAccount/pkg/store/transactionhistory.go | 74 +++++++-------------- 1 file changed, 24 insertions(+), 50 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index 05f4de3..8cf1691 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -1,7 +1,6 @@ package store import ( - "bankacc/pkg/config" "bankacc/pkg/entities" "database/sql" ) @@ -23,76 +22,51 @@ func NewTransactionHistoryStoreModel(db *sql.DB) *TransactionHistoryModel { } func (store *TransactionHistoryModel) Insert(UserId int, AccountId int, Amount float64, Action string, CreatedAt string) (*entities.TransactionHistory, error) { - db, err := config.GetMySQLDB() + transaction := entities.TransactionHistory{ + UserId: UserId, + AccountId: AccountId, + Amount: Amount, + Action: Action, + CreatedAt: CreatedAt, + } + _, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", UserId, AccountId, Amount, Action, CreatedAt) + if err != nil { return nil, err - } else { - TransactionModel := TransactionHistoryModel{ - Db: db, - } - - transaction := entities.TransactionHistory{ - UserId: UserId, - AccountId: AccountId, - Amount: Amount, - Action: Action, - CreatedAt: CreatedAt, - } - _, err := TransactionModel.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", UserId, AccountId, Amount, Action, CreatedAt) - - if err != nil { - return nil, err - } - return &transaction, nil } + return &transaction, nil } func (store *TransactionHistoryModel) GetTransactionsById(Id int) (*[]entities.TransactionHistory, error) { var transactions []entities.TransactionHistory - db, err := config.GetMySQLDB() + result, err := store.Db.Query("SELECT * FROM BankAccount.TransactionHistory WHERE user_id = ?", Id) if err != nil { return nil, err - } else { - TransactionModel := TransactionHistoryModel{ - Db: db, - } - result, err := TransactionModel.Db.Query("SELECT * FROM BankAccount.TransactionHistory WHERE user_id = ?", Id) + } + var transaction entities.TransactionHistory + for result.Next() { + err := result.Scan(&transaction.Id, &transaction.UserId, &transaction.AccountId, &transaction.Amount, &transaction.Action, &transaction.CreatedAt) if err != nil { return nil, err } - var transaction entities.TransactionHistory - for result.Next() { - err := result.Scan(&transaction.Id, &transaction.UserId, &transaction.AccountId, &transaction.Amount, &transaction.Action, &transaction.CreatedAt) - if err != nil { - return nil, err - } - transactions = append(transactions, transaction) - } - return &transactions, nil + transactions = append(transactions, transaction) } + return &transactions, nil } func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(Id int, FromDate string, ToDate string) (*[]entities.TransactionHistory, error) { var transactions []entities.TransactionHistory - db, err := config.GetMySQLDB() + result, err := store.Db.Query("SELECT * FROM BankAccount.TransactionHistory WHERE user_id = ? and created_at between ? and ?", Id, FromDate, ToDate) if err != nil { return nil, err - } else { - TransactionModel := TransactionHistoryModel{ - Db: db, - } - result, err := TransactionModel.Db.Query("SELECT * FROM BankAccount.TransactionHistory WHERE user_id = ? and created_at between ? and ?", Id, FromDate, ToDate) + } + var transaction entities.TransactionHistory + for result.Next() { + err := result.Scan(&transaction.Id, &transaction.UserId, &transaction.AccountId, &transaction.Amount, &transaction.Action, &transaction.CreatedAt) if err != nil { return nil, err } - var transaction entities.TransactionHistory - for result.Next() { - err := result.Scan(&transaction.Id, &transaction.UserId, &transaction.AccountId, &transaction.Amount, &transaction.Action, &transaction.CreatedAt) - if err != nil { - return nil, err - } - transactions = append(transactions, transaction) - } - return &transactions, nil + transactions = append(transactions, transaction) } + return &transactions, nil } From b2b953cf918dbfded493055fa26d88186dfc51cd Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Tue, 21 Jan 2020 14:11:32 +0100 Subject: [PATCH 05/21] Updated queries --- BankAccount/pkg/store/transactionhistory.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index 8cf1691..5f2d494 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -39,7 +39,7 @@ func (store *TransactionHistoryModel) Insert(UserId int, AccountId int, Amount f func (store *TransactionHistoryModel) GetTransactionsById(Id int) (*[]entities.TransactionHistory, error) { var transactions []entities.TransactionHistory - result, err := store.Db.Query("SELECT * FROM BankAccount.TransactionHistory WHERE user_id = ?", Id) + result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ?", Id) if err != nil { return nil, err } @@ -56,7 +56,7 @@ func (store *TransactionHistoryModel) GetTransactionsById(Id int) (*[]entities.T func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(Id int, FromDate string, ToDate string) (*[]entities.TransactionHistory, error) { var transactions []entities.TransactionHistory - result, err := store.Db.Query("SELECT * FROM BankAccount.TransactionHistory WHERE user_id = ? and created_at between ? and ?", Id, FromDate, ToDate) + result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ? and created_at BETWEEN ? and ?", Id, FromDate, ToDate) if err != nil { return nil, err } From d321ce5a1a247b960c3683bac146799fbf41ae6f Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 22 Jan 2020 09:36:20 +0100 Subject: [PATCH 06/21] Renaming function arguments to GO convention --- BankAccount/pkg/store/transactionhistory.go | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index 5f2d494..5a6ab39 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -6,9 +6,9 @@ import ( ) type TransactionHistoryStore interface { - Insert(UserId int, AccountId int, Amount float64, Action string, CreatedAt string) (*entities.TransactionHistory, error) - GetTransactionsById(Id int) (*[]entities.TransactionHistory, error) - GetTransactionsByIdFromToDate(Id int, FromDate string, ToDate string) (*[]entities.TransactionHistory, error) + Insert(userId int, accountId int, amount float64, action string, createdAt string) (*entities.TransactionHistory, error) + GetTransactionsById(id int) (*[]entities.TransactionHistory, error) + GetTransactionsByIdFromToDate(id int, fromDate string, toDate string) (*[]entities.TransactionHistory, error) } type TransactionHistoryModel struct { @@ -21,15 +21,15 @@ func NewTransactionHistoryStoreModel(db *sql.DB) *TransactionHistoryModel { } } -func (store *TransactionHistoryModel) Insert(UserId int, AccountId int, Amount float64, Action string, CreatedAt string) (*entities.TransactionHistory, error) { +func (store *TransactionHistoryModel) Insert(userId int, accountId int, amount float64, action string, createdAt string) (*entities.TransactionHistory, error) { transaction := entities.TransactionHistory{ - UserId: UserId, - AccountId: AccountId, - Amount: Amount, - Action: Action, - CreatedAt: CreatedAt, + UserId: userId, + AccountId: accountId, + Amount: amount, + Action: action, + CreatedAt: createdAt, } - _, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", UserId, AccountId, Amount, Action, CreatedAt) + _, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", userId, accountId, amount, action, createdAt) if err != nil { return nil, err @@ -37,9 +37,9 @@ func (store *TransactionHistoryModel) Insert(UserId int, AccountId int, Amount f return &transaction, nil } -func (store *TransactionHistoryModel) GetTransactionsById(Id int) (*[]entities.TransactionHistory, error) { +func (store *TransactionHistoryModel) GetTransactionsById(id int) (*[]entities.TransactionHistory, error) { var transactions []entities.TransactionHistory - result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ?", Id) + result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ?", id) if err != nil { return nil, err } @@ -54,9 +54,9 @@ func (store *TransactionHistoryModel) GetTransactionsById(Id int) (*[]entities.T return &transactions, nil } -func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(Id int, FromDate string, ToDate string) (*[]entities.TransactionHistory, error) { +func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(id int, fromDate string, toDate string) (*[]entities.TransactionHistory, error) { var transactions []entities.TransactionHistory - result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ? and created_at BETWEEN ? and ?", Id, FromDate, ToDate) + result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ? and created_at BETWEEN ? and ?", id, fromDate, toDate) if err != nil { return nil, err } From 9cbeffa252648140123aebcc71ce5d278ef45eee Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 22 Jan 2020 10:36:54 +0100 Subject: [PATCH 07/21] Resolved variable types --- BankAccount/pkg/store/transactionhistory.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index 5a6ab39..ea8eaa1 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -3,12 +3,13 @@ package store import ( "bankacc/pkg/entities" "database/sql" + "time" ) type TransactionHistoryStore interface { - Insert(userId int, accountId int, amount float64, action string, createdAt string) (*entities.TransactionHistory, error) + Insert(userId int, accountId int, amount float64, action string) (*entities.TransactionHistory, error) GetTransactionsById(id int) (*[]entities.TransactionHistory, error) - GetTransactionsByIdFromToDate(id int, fromDate string, toDate string) (*[]entities.TransactionHistory, error) + GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) (*[]entities.TransactionHistory, error) } type TransactionHistoryModel struct { @@ -21,15 +22,15 @@ func NewTransactionHistoryStoreModel(db *sql.DB) *TransactionHistoryModel { } } -func (store *TransactionHistoryModel) Insert(userId int, accountId int, amount float64, action string, createdAt string) (*entities.TransactionHistory, error) { +func (store *TransactionHistoryModel) Insert(userId int, accountId int, amount float64, action string) (*entities.TransactionHistory, error) { transaction := entities.TransactionHistory{ UserId: userId, AccountId: accountId, Amount: amount, Action: action, - CreatedAt: createdAt, + CreatedAt: time.Now(), } - _, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", userId, accountId, amount, action, createdAt) + _, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", userId, accountId, amount, action, time.Now().Format("2006-01-02T15:04:05")) if err != nil { return nil, err @@ -54,7 +55,7 @@ func (store *TransactionHistoryModel) GetTransactionsById(id int) (*[]entities.T return &transactions, nil } -func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(id int, fromDate string, toDate string) (*[]entities.TransactionHistory, error) { +func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) (*[]entities.TransactionHistory, error) { var transactions []entities.TransactionHistory result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ? and created_at BETWEEN ? and ?", id, fromDate, toDate) if err != nil { From 3ad66c0c1c651d9b2358b91201e0d5000803d953 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 22 Jan 2020 11:14:36 +0100 Subject: [PATCH 08/21] Added time.Now() in a variable --- BankAccount/pkg/store/transactionhistory.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index ea8eaa1..a76391c 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -23,14 +23,15 @@ func NewTransactionHistoryStoreModel(db *sql.DB) *TransactionHistoryModel { } func (store *TransactionHistoryModel) Insert(userId int, accountId int, amount float64, action string) (*entities.TransactionHistory, error) { + now := time.Now() transaction := entities.TransactionHistory{ UserId: userId, AccountId: accountId, Amount: amount, Action: action, - CreatedAt: time.Now(), + CreatedAt: now, } - _, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", userId, accountId, amount, action, time.Now().Format("2006-01-02T15:04:05")) + _, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", userId, accountId, amount, action, now) if err != nil { return nil, err From 2a6c92e5428a9592145ede1cb4c2aa96110cf097 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Tue, 28 Jan 2020 16:49:07 +0100 Subject: [PATCH 09/21] TransactionHistoryStore Tests --- .../pkg/tests/transactionhistorystore_test.go | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 BankAccount/pkg/tests/transactionhistorystore_test.go diff --git a/BankAccount/pkg/tests/transactionhistorystore_test.go b/BankAccount/pkg/tests/transactionhistorystore_test.go new file mode 100644 index 0000000..ffe984c --- /dev/null +++ b/BankAccount/pkg/tests/transactionhistorystore_test.go @@ -0,0 +1,147 @@ +package tests + +import ( + "bankacc/pkg/entities" + "bankacc/pkg/store" + "database/sql" + "log" + "testing" + "time" + + _ "github.com/go-sql-driver/mysql" + "github.com/stretchr/testify/suite" +) + +func MySQLInit() *sql.DB { + dbDriver := "mysql" + dbUser := "root" + dbPass := "Password1!" + dbName := "BankAccount?parseTime=true" + db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) + if err != nil { + log.Println(err) + } + return db +} + +type TearDownTestSuite interface { + TearDownTest() +} + +type TransactionHistoryTestSuite struct { + suite.Suite + Transaction *entities.TransactionHistory + Transactions []entities.TransactionHistory + TransactionsP []*entities.TransactionHistory + TransactionStore store.TransactionHistoryModel + Db *sql.DB +} + +func (suite *TransactionHistoryTestSuite) SetupTest() { + var err error + suite.Db = MySQLInit() + transaction := store.NewTransactionHistoryStoreModel(suite.Db) + suite.Transactions = []entities.TransactionHistory{ + { + UserId: 1, + AccountId: 1, + Amount: 100, + Action: "Deposit", + }, + { + UserId: 2, + AccountId: 1, + Amount: 200, + Action: "Withdraw", + }, + { + UserId: 3, + AccountId: 3, + Amount: 300, + Action: "Deposit", + }, + } + + for _, value := range suite.Transactions { + suite.Transaction, err = transaction.Insert(value.UserId, value.AccountId, value.Amount, value.Action) + if err != nil { + suite.T().Fatal("Unable to run InsertTransactionHistory store func") + } + suite.TransactionsP = append(suite.TransactionsP, suite.Transaction) + } +} + +func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { + store := store.NewTransactionHistoryStoreModel(suite.Db) + var err error + var transaction *[]entities.TransactionHistory + var transact []*entities.TransactionHistory + var tr *entities.TransactionHistory + for _, value := range suite.TransactionsP { + transaction, err = store.GetTransactionsById(value.UserId) + if err != nil { + suite.T().Fatal("Unable to run InsertTransactionHistory store func") + } + for i := range *transaction { + tr = &(*transaction)[i] + } + transact = append(transact, tr) + } + + for i, value := range transact { + suite.Equal(value.Id, transact[i].Id) + suite.Equal(value.UserId, transact[i].UserId) + suite.Equal(value.AccountId, transact[i].AccountId) + suite.Equal(value.Action, transact[i].Action) + suite.Equal(value.Amount, transact[i].Amount) + } +} + +func (suite *TransactionHistoryTestSuite) TestGetTransactionByIdFromToDate() { + store := store.NewTransactionHistoryStoreModel(suite.Db) + var err error + var transaction *[]entities.TransactionHistory + var transact []*entities.TransactionHistory + var tr *entities.TransactionHistory + for _, value := range suite.TransactionsP { + var k int + for k = value.CreatedAt.Nanosecond(); k >= 10; k = k / 10 { + } + if k >= 5 { + value.CreatedAt = value.CreatedAt.Add(time.Second * 1) + } + value.CreatedAt, _ = time.Parse("2006-01-02 15:04:05", value.CreatedAt.UTC().Format("2006-01-02 15:04:05")) + transaction, err = store.GetTransactionsByIdFromToDate(value.UserId, value.CreatedAt.UTC(), value.CreatedAt.UTC()) + if err != nil { + suite.T().Fatal("Unable to run InsertTransactionHistory store func") + } + for i := range *transaction { + tr = &(*transaction)[i] + } + + transact = append(transact, tr) + } + + for i, value := range transact { + if i >= len(suite.TransactionsP)/2 { + suite.Equal(value.Id, suite.TransactionsP[i].Id) + suite.Equal(value.UserId, suite.TransactionsP[i].UserId) + suite.Equal(value.AccountId, suite.TransactionsP[i].AccountId) + suite.Equal(value.Action, suite.TransactionsP[i].Action) + suite.Equal(value.Amount, suite.TransactionsP[i].Amount) + } + } +} + +func TestTransactionHistoryTestSuite(t *testing.T) { + suite.Run(t, new(TransactionHistoryTestSuite)) +} + +func (suite *TransactionHistoryTestSuite) TearDownTest() { + for i := 0; i < len(suite.TransactionsP); i++ { + _, err := suite.Db.Exec("DELETE FROM TransactionHistory WHERE id=?", suite.TransactionsP[i].Id) + if err != nil { + suite.T().Fatal("Unable to run delete query") + } + } +} From e38c58dbf475cb2b54661e67463ee22a5fc915ff Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 29 Jan 2020 09:51:34 +0100 Subject: [PATCH 10/21] Tests fixed --- .../pkg/tests/transactionhistorystore_test.go | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/BankAccount/pkg/tests/transactionhistorystore_test.go b/BankAccount/pkg/tests/transactionhistorystore_test.go index ffe984c..69d3c89 100644 --- a/BankAccount/pkg/tests/transactionhistorystore_test.go +++ b/BankAccount/pkg/tests/transactionhistorystore_test.go @@ -48,6 +48,12 @@ func (suite *TransactionHistoryTestSuite) SetupTest() { Amount: 100, Action: "Deposit", }, + { + UserId: 1, + AccountId: 2, + Amount: 44, + Action: "Deposit", + }, { UserId: 2, AccountId: 1, @@ -88,12 +94,16 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { transact = append(transact, tr) } - for i, value := range transact { - suite.Equal(value.Id, transact[i].Id) - suite.Equal(value.UserId, transact[i].UserId) - suite.Equal(value.AccountId, transact[i].AccountId) - suite.Equal(value.Action, transact[i].Action) - suite.Equal(value.Amount, transact[i].Amount) + for _, value := range suite.TransactionsP { + for i := range transact { + if value.Id == transact[i].Id { + suite.Equal(value.Id, transact[i].Id) + suite.Equal(value.UserId, transact[i].UserId) + suite.Equal(value.AccountId, transact[i].AccountId) + suite.Equal(value.Action, transact[i].Action) + suite.Equal(value.Amount, transact[i].Amount) + } + } } } @@ -118,17 +128,18 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionByIdFromToDate() { for i := range *transaction { tr = &(*transaction)[i] } - transact = append(transact, tr) } - for i, value := range transact { - if i >= len(suite.TransactionsP)/2 { - suite.Equal(value.Id, suite.TransactionsP[i].Id) - suite.Equal(value.UserId, suite.TransactionsP[i].UserId) - suite.Equal(value.AccountId, suite.TransactionsP[i].AccountId) - suite.Equal(value.Action, suite.TransactionsP[i].Action) - suite.Equal(value.Amount, suite.TransactionsP[i].Amount) + for _, value := range suite.TransactionsP { + for i := range transact { + if value.Id == transact[i].Id { + suite.Equal(value.Id, transact[i].Id) + suite.Equal(value.UserId, transact[i].UserId) + suite.Equal(value.AccountId, transact[i].AccountId) + suite.Equal(value.Action, transact[i].Action) + suite.Equal(value.Amount, transact[i].Amount) + } } } } From 5cf245a13804f8baf2fea47b8c04cb7c97473e9c Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 29 Jan 2020 09:59:10 +0100 Subject: [PATCH 11/21] Tests fixed --- BankAccount/pkg/tests/transactionhistorystore_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/BankAccount/pkg/tests/transactionhistorystore_test.go b/BankAccount/pkg/tests/transactionhistorystore_test.go index 69d3c89..6e55791 100644 --- a/BankAccount/pkg/tests/transactionhistorystore_test.go +++ b/BankAccount/pkg/tests/transactionhistorystore_test.go @@ -97,7 +97,6 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { for _, value := range suite.TransactionsP { for i := range transact { if value.Id == transact[i].Id { - suite.Equal(value.Id, transact[i].Id) suite.Equal(value.UserId, transact[i].UserId) suite.Equal(value.AccountId, transact[i].AccountId) suite.Equal(value.Action, transact[i].Action) @@ -134,7 +133,6 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionByIdFromToDate() { for _, value := range suite.TransactionsP { for i := range transact { if value.Id == transact[i].Id { - suite.Equal(value.Id, transact[i].Id) suite.Equal(value.UserId, transact[i].UserId) suite.Equal(value.AccountId, transact[i].AccountId) suite.Equal(value.Action, transact[i].Action) From 41f2ff97f0c5d8dfa2d78b333249b2cc6e7054aa Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 29 Jan 2020 13:43:47 +0100 Subject: [PATCH 12/21] Changes to functions return types --- BankAccount/pkg/store/transactionhistory.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index a76391c..d91f443 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -39,8 +39,8 @@ func (store *TransactionHistoryModel) Insert(userId int, accountId int, amount f return &transaction, nil } -func (store *TransactionHistoryModel) GetTransactionsById(id int) (*[]entities.TransactionHistory, error) { - var transactions []entities.TransactionHistory +func (store *TransactionHistoryModel) GetTransactionsById(id int) ([]*entities.TransactionHistory, error) { + var transactions []*entities.TransactionHistory result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ?", id) if err != nil { return nil, err @@ -51,13 +51,13 @@ func (store *TransactionHistoryModel) GetTransactionsById(id int) (*[]entities.T if err != nil { return nil, err } - transactions = append(transactions, transaction) + transactions = append(transactions, &transaction) } - return &transactions, nil + return transactions, nil } -func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) (*[]entities.TransactionHistory, error) { - var transactions []entities.TransactionHistory +func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) ([]*entities.TransactionHistory, error) { + var transactions []*entities.TransactionHistory result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ? and created_at BETWEEN ? and ?", id, fromDate, toDate) if err != nil { return nil, err @@ -68,7 +68,7 @@ func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(id int, from if err != nil { return nil, err } - transactions = append(transactions, transaction) + transactions = append(transactions, &transaction) } - return &transactions, nil + return transactions, nil } From f9d9581df55fc2528b008bf8fd5699e81775e07c Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 29 Jan 2020 13:58:42 +0100 Subject: [PATCH 13/21] Changed functions return types --- BankAccount/pkg/store/transactionhistory.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index d91f443..fe2f22b 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -8,8 +8,8 @@ import ( type TransactionHistoryStore interface { Insert(userId int, accountId int, amount float64, action string) (*entities.TransactionHistory, error) - GetTransactionsById(id int) (*[]entities.TransactionHistory, error) - GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) (*[]entities.TransactionHistory, error) + GetTransactionsById(id int) ([]*entities.TransactionHistory, error) + GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) ([]*entities.TransactionHistory, error) } type TransactionHistoryModel struct { From 796933d5ecd467aefe073bce0f70f236b2c5d644 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 29 Jan 2020 14:14:49 +0100 Subject: [PATCH 14/21] Removed unnecessary variables --- .../pkg/tests/transactionhistorystore_test.go | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/BankAccount/pkg/tests/transactionhistorystore_test.go b/BankAccount/pkg/tests/transactionhistorystore_test.go index 6e55791..c21b532 100644 --- a/BankAccount/pkg/tests/transactionhistorystore_test.go +++ b/BankAccount/pkg/tests/transactionhistorystore_test.go @@ -48,6 +48,12 @@ func (suite *TransactionHistoryTestSuite) SetupTest() { Amount: 100, Action: "Deposit", }, + { + UserId: 1, + AccountId: 1, + Amount: 100, + Action: "Withdraw", + }, { UserId: 1, AccountId: 2, @@ -80,23 +86,18 @@ func (suite *TransactionHistoryTestSuite) SetupTest() { func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { store := store.NewTransactionHistoryStoreModel(suite.Db) var err error - var transaction *[]entities.TransactionHistory var transact []*entities.TransactionHistory - var tr *entities.TransactionHistory for _, value := range suite.TransactionsP { - transaction, err = store.GetTransactionsById(value.UserId) + transact, err = store.GetTransactionsById(value.UserId) if err != nil { - suite.T().Fatal("Unable to run InsertTransactionHistory store func") - } - for i := range *transaction { - tr = &(*transaction)[i] + suite.T().Fatal("Unable to run GetTransactionsById store func") } - transact = append(transact, tr) } for _, value := range suite.TransactionsP { for i := range transact { if value.Id == transact[i].Id { + suite.Equal(value.Id, transact[i].Id) suite.Equal(value.UserId, transact[i].UserId) suite.Equal(value.AccountId, transact[i].AccountId) suite.Equal(value.Action, transact[i].Action) @@ -109,9 +110,7 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { func (suite *TransactionHistoryTestSuite) TestGetTransactionByIdFromToDate() { store := store.NewTransactionHistoryStoreModel(suite.Db) var err error - var transaction *[]entities.TransactionHistory var transact []*entities.TransactionHistory - var tr *entities.TransactionHistory for _, value := range suite.TransactionsP { var k int for k = value.CreatedAt.Nanosecond(); k >= 10; k = k / 10 { @@ -120,19 +119,16 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionByIdFromToDate() { value.CreatedAt = value.CreatedAt.Add(time.Second * 1) } value.CreatedAt, _ = time.Parse("2006-01-02 15:04:05", value.CreatedAt.UTC().Format("2006-01-02 15:04:05")) - transaction, err = store.GetTransactionsByIdFromToDate(value.UserId, value.CreatedAt.UTC(), value.CreatedAt.UTC()) + transact, err = store.GetTransactionsByIdFromToDate(value.UserId, value.CreatedAt.UTC(), value.CreatedAt.UTC()) if err != nil { - suite.T().Fatal("Unable to run InsertTransactionHistory store func") - } - for i := range *transaction { - tr = &(*transaction)[i] + suite.T().Fatal("Unable to run GetTransactionsByIdFromDate store func") } - transact = append(transact, tr) } for _, value := range suite.TransactionsP { for i := range transact { if value.Id == transact[i].Id { + suite.Equal(value.Id, transact[i].Id) suite.Equal(value.UserId, transact[i].UserId) suite.Equal(value.AccountId, transact[i].AccountId) suite.Equal(value.Action, transact[i].Action) From b7dbb7abc4b0f8265625d64da05f08aeedc7510d Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 29 Jan 2020 14:17:46 +0100 Subject: [PATCH 15/21] Removed unnecessary variables --- BankAccount/pkg/tests/transactionhistorystore_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/BankAccount/pkg/tests/transactionhistorystore_test.go b/BankAccount/pkg/tests/transactionhistorystore_test.go index c21b532..6a1c080 100644 --- a/BankAccount/pkg/tests/transactionhistorystore_test.go +++ b/BankAccount/pkg/tests/transactionhistorystore_test.go @@ -97,7 +97,6 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { for _, value := range suite.TransactionsP { for i := range transact { if value.Id == transact[i].Id { - suite.Equal(value.Id, transact[i].Id) suite.Equal(value.UserId, transact[i].UserId) suite.Equal(value.AccountId, transact[i].AccountId) suite.Equal(value.Action, transact[i].Action) @@ -128,7 +127,6 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionByIdFromToDate() { for _, value := range suite.TransactionsP { for i := range transact { if value.Id == transact[i].Id { - suite.Equal(value.Id, transact[i].Id) suite.Equal(value.UserId, transact[i].UserId) suite.Equal(value.AccountId, transact[i].AccountId) suite.Equal(value.Action, transact[i].Action) From 3246f2c62510421fe7c1414292b8fa32efae6d74 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Wed, 29 Jan 2020 14:23:09 +0100 Subject: [PATCH 16/21] Added lastInsertIndex in Insert func --- BankAccount/pkg/store/transactionhistory.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index fe2f22b..19649e3 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -24,18 +24,23 @@ func NewTransactionHistoryStoreModel(db *sql.DB) *TransactionHistoryModel { func (store *TransactionHistoryModel) Insert(userId int, accountId int, amount float64, action string) (*entities.TransactionHistory, error) { now := time.Now() + + result, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", userId, accountId, amount, action, now) + if err != nil { + return nil, err + } + res, err := result.LastInsertId() + if err != nil { + return nil, err + } transaction := entities.TransactionHistory{ + Id: int(res), UserId: userId, AccountId: accountId, Amount: amount, Action: action, CreatedAt: now, } - _, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", userId, accountId, amount, action, now) - - if err != nil { - return nil, err - } return &transaction, nil } From bab15d4f2f1c9e6991afede213c0d8265acdae69 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Thu, 30 Jan 2020 13:48:28 +0100 Subject: [PATCH 17/21] Fixed for iteration --- .../pkg/tests/transactionhistorystore_test.go | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/BankAccount/pkg/tests/transactionhistorystore_test.go b/BankAccount/pkg/tests/transactionhistorystore_test.go index 6a1c080..3444b4c 100644 --- a/BankAccount/pkg/tests/transactionhistorystore_test.go +++ b/BankAccount/pkg/tests/transactionhistorystore_test.go @@ -4,6 +4,7 @@ import ( "bankacc/pkg/entities" "bankacc/pkg/store" "database/sql" + "fmt" "log" "testing" "time" @@ -34,6 +35,7 @@ type TransactionHistoryTestSuite struct { Transactions []entities.TransactionHistory TransactionsP []*entities.TransactionHistory TransactionStore store.TransactionHistoryModel + TransactionID []int Db *sql.DB } @@ -63,13 +65,13 @@ func (suite *TransactionHistoryTestSuite) SetupTest() { { UserId: 2, AccountId: 1, - Amount: 200, - Action: "Withdraw", + Amount: 65, + Action: "Deposit", }, { - UserId: 3, - AccountId: 3, - Amount: 300, + UserId: 2, + AccountId: 2, + Amount: 44, Action: "Deposit", }, } @@ -80,6 +82,7 @@ func (suite *TransactionHistoryTestSuite) SetupTest() { suite.T().Fatal("Unable to run InsertTransactionHistory store func") } suite.TransactionsP = append(suite.TransactionsP, suite.Transaction) + suite.TransactionID = []int{1, 2} } } @@ -87,19 +90,22 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { store := store.NewTransactionHistoryStoreModel(suite.Db) var err error var transact []*entities.TransactionHistory - for _, value := range suite.TransactionsP { - transact, err = store.GetTransactionsById(value.UserId) - if err != nil { - suite.T().Fatal("Unable to run GetTransactionsById store func") - } + //for _, value := range suite.TransactionID { + transact, err = store.GetTransactionsById(1) + if err != nil { + suite.T().Fatal("Unable to run GetTransactionsById store func") } + fmt.Println(transact) + + //} + for _, value := range suite.TransactionsP { for i := range transact { if value.Id == transact[i].Id { suite.Equal(value.UserId, transact[i].UserId) suite.Equal(value.AccountId, transact[i].AccountId) - suite.Equal(value.Action, transact[i].Action) + suite.Equal(1, transact[i].Action) suite.Equal(value.Amount, transact[i].Amount) } } From 525c2a2aef1b0c4d297162edeb54a66c17d9a1a1 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Thu, 30 Jan 2020 15:14:12 +0100 Subject: [PATCH 18/21] Merged with master --- BankAccount/cmd/main.go | 4 ---- BankAccount/go.mod | 5 +++++ BankAccount/go.sum | 2 ++ .../pkg/tests/transactionhistorystore_test.go | 18 +++++++----------- 4 files changed, 14 insertions(+), 15 deletions(-) create mode 100644 BankAccount/go.mod create mode 100644 BankAccount/go.sum diff --git a/BankAccount/cmd/main.go b/BankAccount/cmd/main.go index 7905807..06ab7d0 100644 --- a/BankAccount/cmd/main.go +++ b/BankAccount/cmd/main.go @@ -1,5 +1 @@ package main - -func main() { - -} diff --git a/BankAccount/go.mod b/BankAccount/go.mod new file mode 100644 index 0000000..91bb406 --- /dev/null +++ b/BankAccount/go.mod @@ -0,0 +1,5 @@ +module bankacc + +go 1.13 + +require github.com/go-sql-driver/mysql v1.5.0 diff --git a/BankAccount/go.sum b/BankAccount/go.sum new file mode 100644 index 0000000..d314899 --- /dev/null +++ b/BankAccount/go.sum @@ -0,0 +1,2 @@ +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= diff --git a/BankAccount/pkg/tests/transactionhistorystore_test.go b/BankAccount/pkg/tests/transactionhistorystore_test.go index 3444b4c..4e23ea2 100644 --- a/BankAccount/pkg/tests/transactionhistorystore_test.go +++ b/BankAccount/pkg/tests/transactionhistorystore_test.go @@ -4,7 +4,6 @@ import ( "bankacc/pkg/entities" "bankacc/pkg/store" "database/sql" - "fmt" "log" "testing" "time" @@ -43,6 +42,7 @@ func (suite *TransactionHistoryTestSuite) SetupTest() { var err error suite.Db = MySQLInit() transaction := store.NewTransactionHistoryStoreModel(suite.Db) + suite.TransactionID = []int{1, 2} suite.Transactions = []entities.TransactionHistory{ { UserId: 1, @@ -82,7 +82,6 @@ func (suite *TransactionHistoryTestSuite) SetupTest() { suite.T().Fatal("Unable to run InsertTransactionHistory store func") } suite.TransactionsP = append(suite.TransactionsP, suite.Transaction) - suite.TransactionID = []int{1, 2} } } @@ -90,22 +89,19 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { store := store.NewTransactionHistoryStoreModel(suite.Db) var err error var transact []*entities.TransactionHistory - //for _, value := range suite.TransactionID { - transact, err = store.GetTransactionsById(1) - if err != nil { - suite.T().Fatal("Unable to run GetTransactionsById store func") + for _, value := range suite.TransactionID { + transact, err = store.GetTransactionsById(value) + if err != nil { + suite.T().Fatal("Unable to run GetTransactionsById store func") + } } - fmt.Println(transact) - - //} - for _, value := range suite.TransactionsP { for i := range transact { if value.Id == transact[i].Id { suite.Equal(value.UserId, transact[i].UserId) suite.Equal(value.AccountId, transact[i].AccountId) - suite.Equal(1, transact[i].Action) + suite.Equal(value.Action, transact[i].Action) suite.Equal(value.Amount, transact[i].Amount) } } From 324f24e561b7928693eb9b83900b27cb1b4efb58 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Fri, 31 Jan 2020 10:50:10 +0100 Subject: [PATCH 19/21] Added go mod --- BankAccount/go.mod | 5 ++++- BankAccount/go.sum | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/BankAccount/go.mod b/BankAccount/go.mod index 91bb406..75fe168 100644 --- a/BankAccount/go.mod +++ b/BankAccount/go.mod @@ -2,4 +2,7 @@ module bankacc go 1.13 -require github.com/go-sql-driver/mysql v1.5.0 +require ( + github.com/go-sql-driver/mysql v1.5.0 + github.com/stretchr/testify v1.4.0 +) diff --git a/BankAccount/go.sum b/BankAccount/go.sum index d314899..ecf908b 100644 --- a/BankAccount/go.sum +++ b/BankAccount/go.sum @@ -1,2 +1,13 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 6049447d65dea984f7ab97dd8bfa1074cc05d7d9 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Mon, 3 Feb 2020 14:22:36 +0100 Subject: [PATCH 20/21] Changed return values in transactionhistorystore and modified tests --- BankAccount/pkg/store/transactionhistory.go | 27 +-- .../pkg/tests/transactionhistorystore_test.go | 154 ++++++++++++------ 2 files changed, 122 insertions(+), 59 deletions(-) diff --git a/BankAccount/pkg/store/transactionhistory.go b/BankAccount/pkg/store/transactionhistory.go index 19649e3..320fc15 100644 --- a/BankAccount/pkg/store/transactionhistory.go +++ b/BankAccount/pkg/store/transactionhistory.go @@ -3,13 +3,14 @@ package store import ( "bankacc/pkg/entities" "database/sql" + "fmt" "time" ) type TransactionHistoryStore interface { - Insert(userId int, accountId int, amount float64, action string) (*entities.TransactionHistory, error) - GetTransactionsById(id int) ([]*entities.TransactionHistory, error) - GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) ([]*entities.TransactionHistory, error) + Insert(userId int, accountId int, amount float64, action string) (entities.TransactionHistory, error) + GetTransactionsById(id int) ([]entities.TransactionHistory, error) + GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) ([]entities.TransactionHistory, error) } type TransactionHistoryModel struct { @@ -22,16 +23,16 @@ func NewTransactionHistoryStoreModel(db *sql.DB) *TransactionHistoryModel { } } -func (store *TransactionHistoryModel) Insert(userId int, accountId int, amount float64, action string) (*entities.TransactionHistory, error) { +func (store *TransactionHistoryModel) Insert(userId int, accountId int, amount float64, action string) (entities.TransactionHistory, error) { now := time.Now() result, err := store.Db.Exec("INSERT INTO TransactionHistory(user_id, account_id, amount, action, created_at) VALUES(?, ?, ?, ?, ?)", userId, accountId, amount, action, now) if err != nil { - return nil, err + fmt.Println(err) } res, err := result.LastInsertId() if err != nil { - return nil, err + fmt.Println(err) } transaction := entities.TransactionHistory{ Id: int(res), @@ -41,11 +42,11 @@ func (store *TransactionHistoryModel) Insert(userId int, accountId int, amount f Action: action, CreatedAt: now, } - return &transaction, nil + return transaction, nil } -func (store *TransactionHistoryModel) GetTransactionsById(id int) ([]*entities.TransactionHistory, error) { - var transactions []*entities.TransactionHistory +func (store *TransactionHistoryModel) GetTransactionsById(id int) ([]entities.TransactionHistory, error) { + var transactions []entities.TransactionHistory result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ?", id) if err != nil { return nil, err @@ -56,13 +57,13 @@ func (store *TransactionHistoryModel) GetTransactionsById(id int) ([]*entities.T if err != nil { return nil, err } - transactions = append(transactions, &transaction) + transactions = append(transactions, transaction) } return transactions, nil } -func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) ([]*entities.TransactionHistory, error) { - var transactions []*entities.TransactionHistory +func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(id int, fromDate time.Time, toDate time.Time) ([]entities.TransactionHistory, error) { + var transactions []entities.TransactionHistory result, err := store.Db.Query("SELECT * FROM TransactionHistory WHERE user_id = ? and created_at BETWEEN ? and ?", id, fromDate, toDate) if err != nil { return nil, err @@ -73,7 +74,7 @@ func (store *TransactionHistoryModel) GetTransactionsByIdFromToDate(id int, from if err != nil { return nil, err } - transactions = append(transactions, &transaction) + transactions = append(transactions, transaction) } return transactions, nil } diff --git a/BankAccount/pkg/tests/transactionhistorystore_test.go b/BankAccount/pkg/tests/transactionhistorystore_test.go index 4e23ea2..6b984e9 100644 --- a/BankAccount/pkg/tests/transactionhistorystore_test.go +++ b/BankAccount/pkg/tests/transactionhistorystore_test.go @@ -30,11 +30,9 @@ type TearDownTestSuite interface { type TransactionHistoryTestSuite struct { suite.Suite - Transaction *entities.TransactionHistory + Transaction entities.TransactionHistory Transactions []entities.TransactionHistory - TransactionsP []*entities.TransactionHistory TransactionStore store.TransactionHistoryModel - TransactionID []int Db *sql.DB } @@ -42,7 +40,6 @@ func (suite *TransactionHistoryTestSuite) SetupTest() { var err error suite.Db = MySQLInit() transaction := store.NewTransactionHistoryStoreModel(suite.Db) - suite.TransactionID = []int{1, 2} suite.Transactions = []entities.TransactionHistory{ { UserId: 1, @@ -65,77 +62,142 @@ func (suite *TransactionHistoryTestSuite) SetupTest() { { UserId: 2, AccountId: 1, - Amount: 65, - Action: "Deposit", - }, - { - UserId: 2, - AccountId: 2, - Amount: 44, - Action: "Deposit", + Amount: 741, + Action: "Withdraw", }, } - for _, value := range suite.Transactions { - suite.Transaction, err = transaction.Insert(value.UserId, value.AccountId, value.Amount, value.Action) + for i, current := range suite.Transactions { + suite.Transaction, err = transaction.Insert(current.UserId, current.AccountId, current.Amount, current.Action) if err != nil { suite.T().Fatal("Unable to run InsertTransactionHistory store func") } - suite.TransactionsP = append(suite.TransactionsP, suite.Transaction) + suite.Transactions[i] = suite.Transaction } } func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { store := store.NewTransactionHistoryStoreModel(suite.Db) var err error - var transact []*entities.TransactionHistory - for _, value := range suite.TransactionID { - transact, err = store.GetTransactionsById(value) - if err != nil { - suite.T().Fatal("Unable to run GetTransactionsById store func") + var transaction []entities.TransactionHistory + var transactionsUserIDOne []entities.TransactionHistory + var transactionsUserIDTwo []entities.TransactionHistory + var transactionsUserIDFive []entities.TransactionHistory + now := time.Now() + + transaction, err = store.GetTransactionsById(1) + if err != nil { + suite.T().Fatal("Unable to run GetTransactionsById store func") + } + for i, current := range suite.Transactions { + current.CreatedAt = now + if len(transaction) > i { + transaction[i].CreatedAt = now + } + + if current.UserId == 1 { + transactionsUserIDOne = append(transactionsUserIDOne, current) + } + } + suite.Equal(transactionsUserIDOne, transaction, "Users with ID 1 not equal") + + transaction, err = store.GetTransactionsById(2) + if err != nil { + suite.T().Fatal("Unable to run GetTransactionsById store func") + } + for i, current := range suite.Transactions { + current.CreatedAt = now + if len(transaction) > i { + transaction[i].CreatedAt = now + } + if current.UserId == 2 { + transactionsUserIDTwo = append(transactionsUserIDTwo, current) } } + suite.Equal(transactionsUserIDTwo, transaction, "Users with ID 2 not equal") - for _, value := range suite.TransactionsP { - for i := range transact { - if value.Id == transact[i].Id { - suite.Equal(value.UserId, transact[i].UserId) - suite.Equal(value.AccountId, transact[i].AccountId) - suite.Equal(value.Action, transact[i].Action) - suite.Equal(value.Amount, transact[i].Amount) - } + transaction, err = store.GetTransactionsById(5) + if err != nil { + suite.T().Fatal("Unable to run GetTransactionsById store func") + } + for i, current := range suite.Transactions { + current.CreatedAt = now + if len(transaction) > i { + transaction[i].CreatedAt = now + } + if current.UserId == 5 { + transactionsUserIDFive = append(transactionsUserIDFive, current) } } + var emptyTransaction []entities.TransactionHistory + suite.Equal(emptyTransaction, transaction, "GetTransactionById should return empty struct") } func (suite *TransactionHistoryTestSuite) TestGetTransactionByIdFromToDate() { store := store.NewTransactionHistoryStoreModel(suite.Db) var err error - var transact []*entities.TransactionHistory - for _, value := range suite.TransactionsP { + var transaction []entities.TransactionHistory + var transactionsUserIDOne []entities.TransactionHistory + var transactionsUserIDTwo []entities.TransactionHistory + var transactionsUserIDFive []entities.TransactionHistory + var now time.Time + + for _, current := range suite.Transactions { var k int - for k = value.CreatedAt.Nanosecond(); k >= 10; k = k / 10 { + for k = current.CreatedAt.Nanosecond(); k >= 10; k = k / 10 { } if k >= 5 { - value.CreatedAt = value.CreatedAt.Add(time.Second * 1) + current.CreatedAt = suite.Transactions[0].CreatedAt.Add(time.Second * 1) } - value.CreatedAt, _ = time.Parse("2006-01-02 15:04:05", value.CreatedAt.UTC().Format("2006-01-02 15:04:05")) - transact, err = store.GetTransactionsByIdFromToDate(value.UserId, value.CreatedAt.UTC(), value.CreatedAt.UTC()) - if err != nil { - suite.T().Fatal("Unable to run GetTransactionsByIdFromDate store func") + current.CreatedAt, _ = time.Parse("2006-01-02 15:04:05", current.CreatedAt.UTC().Format("2006-01-02 15:04:05")) + now = current.CreatedAt + } + + transaction, err = store.GetTransactionsByIdFromToDate(1, now.UTC(), now.UTC()) + if err != nil { + suite.T().Fatal("Unable to run GetTransactionsById store func") + } + for i, current := range suite.Transactions { + current.CreatedAt = now + if len(transaction) > i { + transaction[i].CreatedAt = now + } + + if current.UserId == 1 { + transactionsUserIDOne = append(transactionsUserIDOne, current) + } + } + suite.Equal(transactionsUserIDOne, transaction, "Users with ID 1 not equal") + + transaction, err = store.GetTransactionsByIdFromToDate(2, now, now) + if err != nil { + suite.T().Fatal("Unable to run GetTransactionsById store func") + } + for i, current := range suite.Transactions { + current.CreatedAt = now + if len(transaction) > i { + transaction[i].CreatedAt = now + } + if current.UserId == 2 { + transactionsUserIDTwo = append(transactionsUserIDTwo, current) } } + suite.Equal(transactionsUserIDTwo, transaction, "Users with ID 2 not equal") - for _, value := range suite.TransactionsP { - for i := range transact { - if value.Id == transact[i].Id { - suite.Equal(value.UserId, transact[i].UserId) - suite.Equal(value.AccountId, transact[i].AccountId) - suite.Equal(value.Action, transact[i].Action) - suite.Equal(value.Amount, transact[i].Amount) - } + transaction, err = store.GetTransactionsByIdFromToDate(5, now, now) + if err != nil { + suite.T().Fatal("Unable to run GetTransactionsById store func") + } + for i, current := range suite.Transactions { + current.CreatedAt = now + if len(transaction) > i { + transaction[i].CreatedAt = now + } + if current.UserId == 5 { + transactionsUserIDFive = append(transactionsUserIDFive, current) } } + suite.Equal(transactionsUserIDFive, transaction, "GetTransactionById should return empty struct") } func TestTransactionHistoryTestSuite(t *testing.T) { @@ -143,8 +205,8 @@ func TestTransactionHistoryTestSuite(t *testing.T) { } func (suite *TransactionHistoryTestSuite) TearDownTest() { - for i := 0; i < len(suite.TransactionsP); i++ { - _, err := suite.Db.Exec("DELETE FROM TransactionHistory WHERE id=?", suite.TransactionsP[i].Id) + for i := 0; i < len(suite.Transactions); i++ { + _, err := suite.Db.Exec("DELETE FROM TransactionHistory WHERE id=?", suite.Transactions[i].Id) if err != nil { suite.T().Fatal("Unable to run delete query") } From b9a7e7efb0e927dca8c491c45f6e97f4b3cff438 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Mon, 3 Feb 2020 14:41:56 +0100 Subject: [PATCH 21/21] Changed return values in transactionhistorystore and modified tests --- BankAccount/cmd/main.go | 4 ++++ BankAccount/pkg/tests/transactionhistorystore_test.go | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/BankAccount/cmd/main.go b/BankAccount/cmd/main.go index 06ab7d0..7905807 100644 --- a/BankAccount/cmd/main.go +++ b/BankAccount/cmd/main.go @@ -1 +1,5 @@ package main + +func main() { + +} diff --git a/BankAccount/pkg/tests/transactionhistorystore_test.go b/BankAccount/pkg/tests/transactionhistorystore_test.go index 6b984e9..ea677c9 100644 --- a/BankAccount/pkg/tests/transactionhistorystore_test.go +++ b/BankAccount/pkg/tests/transactionhistorystore_test.go @@ -129,8 +129,7 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionById() { transactionsUserIDFive = append(transactionsUserIDFive, current) } } - var emptyTransaction []entities.TransactionHistory - suite.Equal(emptyTransaction, transaction, "GetTransactionById should return empty struct") + suite.Equal(transactionsUserIDFive, transaction, "GetTransactionById should return empty struct") } func (suite *TransactionHistoryTestSuite) TestGetTransactionByIdFromToDate() { @@ -153,7 +152,7 @@ func (suite *TransactionHistoryTestSuite) TestGetTransactionByIdFromToDate() { now = current.CreatedAt } - transaction, err = store.GetTransactionsByIdFromToDate(1, now.UTC(), now.UTC()) + transaction, err = store.GetTransactionsByIdFromToDate(1, now, now) if err != nil { suite.T().Fatal("Unable to run GetTransactionsById store func") }