From 13e731af1eca83e47f216e8b64dacb2b53ecc1f8 Mon Sep 17 00:00:00 2001 From: Jerrico Dela Cruz <94591636+jerricotandelacruz@users.noreply.github.com> Date: Mon, 7 Oct 2024 17:15:07 +0800 Subject: [PATCH 1/2] refactor: Reorder the execution of middlewares Signed-off-by: Jerrico Dela Cruz <94591636+jerricotandelacruz@users.noreply.github.com> --- src/goapp/middleware/middleware.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/goapp/middleware/middleware.go b/src/goapp/middleware/middleware.go index c6f8724..b253d83 100644 --- a/src/goapp/middleware/middleware.go +++ b/src/goapp/middleware/middleware.go @@ -29,8 +29,8 @@ func ManagedIdentityAuth() Middleware { // Chain applies middlewares to a http.HandlerFunc func Chain(f http.HandlerFunc, middlewares ...Middleware) http.HandlerFunc { - for _, m := range middlewares { - f = m(f) + for i := len(middlewares) - 1; i >= 0; i-- { + f = middlewares[i](f) } return f } From beaa4fb100dd21f32842d00a36e86589886a7c88 Mon Sep 17 00:00:00 2001 From: Ismael Ibuan <102030576+iibuan@users.noreply.github.com> Date: Mon, 7 Oct 2024 21:36:23 +0800 Subject: [PATCH 2/2] update database Signed-off-by: Ismael Ibuan <102030576+iibuan@users.noreply.github.com> --- src/goapp/infrastructure/database/database.go | 103 ++---------------- src/goapp/init.go | 6 +- .../app-module/app-module-repository.go | 4 +- .../approval-request-approver-repository.go | 4 +- src/goapp/repository/item/item-repository.go | 4 +- src/goapp/repository/repository.go | 6 +- 6 files changed, 24 insertions(+), 103 deletions(-) diff --git a/src/goapp/infrastructure/database/database.go b/src/goapp/infrastructure/database/database.go index 74066af..ed3f706 100644 --- a/src/goapp/infrastructure/database/database.go +++ b/src/goapp/infrastructure/database/database.go @@ -11,7 +11,6 @@ import ( type Database struct { connString string - db *sql.DB } func NewDatabase(config config.ConfigManager) Database { @@ -22,32 +21,24 @@ func NewDatabase(config config.ConfigManager) Database { } } -func (d *Database) Connect() error { +func (d *Database) Connect() (*sql.DB, error) { conn, err := sql.Open("sqlserver", d.connString) if err != nil { - return err + return nil, err } - d.db = conn - return nil -} - -func (d *Database) Disconnect() error { - if d.db != nil { - return d.db.Close() - } - return nil + return conn, nil } func (d *Database) Query(query string, args ...any) (*sql.Rows, error) { - err := d.Connect() + conn, err := d.Connect() if err != nil { return nil, err } - defer d.Disconnect() + defer conn.Close() ctx := context.Background() - rows, err := d.db.QueryContext(ctx, query, args...) + rows, err := conn.QueryContext(ctx, query, args...) if err != nil { return nil, err } @@ -55,14 +46,14 @@ func (d *Database) Query(query string, args ...any) (*sql.Rows, error) { } func (d *Database) QueryRow(query string, args ...any) (*sql.Row, error) { - err := d.Connect() + conn, err := d.Connect() if err != nil { return nil, err } - defer d.Disconnect() + defer conn.Close() ctx := context.Background() - row := d.db.QueryRowContext(ctx, query, args...) + row := conn.QueryRowContext(ctx, query, args...) if row == nil { err = fmt.Errorf("QueryRowContext returned nil") } @@ -70,14 +61,14 @@ func (d *Database) QueryRow(query string, args ...any) (*sql.Row, error) { } func (d *Database) Execute(query string, args ...any) error { - err := d.Connect() + conn, err := d.Connect() if err != nil { return err } - defer d.Disconnect() + defer conn.Close() ctx := context.Background() - _, err = d.db.ExecContext(ctx, query, args...) + _, err = conn.ExecContext(ctx, query, args...) if err != nil { return err } @@ -112,73 +103,3 @@ func (d *Database) RowsToMap(rows *sql.Rows) ([]map[string]interface{}, error) { return results, nil } - -// OLD -func (d *Database) Close() error { - if d.db != nil { - return d.db.Close() - } - return nil -} - -// OLD -func (d *Database) ExecuteStoredProcedure(procedure string, params map[string]interface{}) (sql.Result, error) { - var args []interface{} - - for i, v := range params { - args = append(args, sql.Named(i, v)) - } - - ctx := context.Background() - result, err := d.db.ExecContext(ctx, procedure, args...) - - if err != nil { - return nil, err - } - - return result, nil -} - -// OLD -func (d *Database) ExecuteStoredProcedureWithResult(procedure string, params map[string]interface{}) ([]map[string]interface{}, error) { - var args []interface{} - - ctx := context.Background() - - for i, v := range params { - args = append(args, sql.Named(i, v)) - } - - rows, err := d.db.QueryContext(ctx, procedure, args...) - if err != nil { - return nil, err - } - - defer rows.Close() - - columns, err := rows.Columns() - if err != nil { - return nil, err - } - - var results []map[string]interface{} - - for rows.Next() { - values := make([]interface{}, len(columns)) - pointers := make([]interface{}, len(columns)) - for i := range values { - pointers[i] = &values[i] - } - err := rows.Scan(pointers...) - if err != nil { - return nil, err - } - result := make(map[string]interface{}) - for i, val := range values { - result[columns[i]] = val - } - results = append(results, result) - } - - return results, nil -} diff --git a/src/goapp/init.go b/src/goapp/init.go index 641691d..ab5e822 100644 --- a/src/goapp/init.go +++ b/src/goapp/init.go @@ -15,9 +15,9 @@ var ( db database.Database = database.NewDatabase(conf) repo = r.NewRepository( - r.NewApplicationModule(db), - r.NewItem(db), - r.NewApprovalRequestApprover(db), + r.NewApplicationModule(&db), + r.NewItem(&db), + r.NewApprovalRequestApprover(&db), ) svc = s.NewService( diff --git a/src/goapp/repository/app-module/app-module-repository.go b/src/goapp/repository/app-module/app-module-repository.go index 0d1c80c..10bb996 100644 --- a/src/goapp/repository/app-module/app-module-repository.go +++ b/src/goapp/repository/app-module/app-module-repository.go @@ -7,10 +7,10 @@ import ( ) type applicationModuleRepository struct { - db.Database + *db.Database } -func NewApplicationModuleRepository(db db.Database) ApplicationModuleRepository { +func NewApplicationModuleRepository(db *db.Database) ApplicationModuleRepository { return &applicationModuleRepository{ Database: db, } diff --git a/src/goapp/repository/approval-request-approver/approval-request-approver-repository.go b/src/goapp/repository/approval-request-approver/approval-request-approver-repository.go index 8668f28..3199f50 100644 --- a/src/goapp/repository/approval-request-approver/approval-request-approver-repository.go +++ b/src/goapp/repository/approval-request-approver/approval-request-approver-repository.go @@ -7,10 +7,10 @@ import ( ) type approvalRequestApproverRepository struct { - db.Database + *db.Database } -func NewApprovalRequestApproverRepository(db db.Database) ApprovalRequestApproverRepository { +func NewApprovalRequestApproverRepository(db *db.Database) ApprovalRequestApproverRepository { return &approvalRequestApproverRepository{ Database: db, } diff --git a/src/goapp/repository/item/item-repository.go b/src/goapp/repository/item/item-repository.go index 0ed5dfc..0f1c3e2 100644 --- a/src/goapp/repository/item/item-repository.go +++ b/src/goapp/repository/item/item-repository.go @@ -10,10 +10,10 @@ import ( ) type itemRepository struct { - db.Database + *db.Database } -func NewItemRepository(db db.Database) ItemRepository { +func NewItemRepository(db *db.Database) ItemRepository { return &itemRepository{ Database: db, } diff --git a/src/goapp/repository/repository.go b/src/goapp/repository/repository.go index 6c94e4a..c0e7394 100644 --- a/src/goapp/repository/repository.go +++ b/src/goapp/repository/repository.go @@ -25,19 +25,19 @@ func NewRepository(opts ...RepositoryOptionFunc) *Repository { return repo } -func NewApplicationModule(db database.Database) RepositoryOptionFunc { +func NewApplicationModule(db *database.Database) RepositoryOptionFunc { return func(r *Repository) { r.ApplicationModule = rAppModule.NewApplicationModuleRepository(db) } } -func NewItem(db database.Database) RepositoryOptionFunc { +func NewItem(db *database.Database) RepositoryOptionFunc { return func(r *Repository) { r.Item = rItem.NewItemRepository(db) } } -func NewApprovalRequestApprover(db database.Database) RepositoryOptionFunc { +func NewApprovalRequestApprover(db *database.Database) RepositoryOptionFunc { return func(r *Repository) { r.ApprovalRequestApprover = rApprovalRequestApprover.NewApprovalRequestApproverRepository(db) }