Skip to content

Commit

Permalink
update database
Browse files Browse the repository at this point in the history
Signed-off-by: Ismael Ibuan <[email protected]>
  • Loading branch information
iibuan committed Oct 7, 2024
1 parent 23cd26d commit beaa4fb
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 103 deletions.
103 changes: 12 additions & 91 deletions src/goapp/infrastructure/database/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (

type Database struct {
connString string
db *sql.DB
}

func NewDatabase(config config.ConfigManager) Database {
Expand All @@ -22,62 +21,54 @@ 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
}
return rows, nil
}

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")
}
return row, nil
}

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
}
Expand Down Expand Up @@ -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
}
6 changes: 3 additions & 3 deletions src/goapp/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
4 changes: 2 additions & 2 deletions src/goapp/repository/app-module/app-module-repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
Expand Down
4 changes: 2 additions & 2 deletions src/goapp/repository/item/item-repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
Expand Down
6 changes: 3 additions & 3 deletions src/goapp/repository/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down

0 comments on commit beaa4fb

Please sign in to comment.