feat(database): make all database operation be methods instead of methods+structs

This is inspired by the output code generated by sqlc
This commit is contained in:
Guz
2025-03-12 10:15:38 -03:00
parent 9fbcbb96c0
commit 71cd17bb97
2 changed files with 116 additions and 43 deletions

View File

@@ -4,12 +4,13 @@ import (
"context"
"database/sql"
"errors"
"fmt"
"log/slog"
"forge.capytal.company/loreddev/x/tinyssert"
)
var ErrNoRows = sql.ErrNoRows
type Database struct {
sql *sql.DB
ctx context.Context
@@ -72,19 +73,19 @@ func (db *Database) setup() error {
log.Debug("Creating tables")
tables := []Table{
&Project{},
}
tx, err := db.sql.BeginTx(db.ctx, nil)
if err != nil {
return errors.Join(errors.New("unable to start transaction to create tables"), err)
}
for _, t := range tables {
_, err := tx.Exec(t.setup())
setups := []func(*sql.Tx) error{
db.setupProjects,
}
for _, setup := range setups {
err := setup(tx)
if err != nil {
return errors.Join(fmt.Errorf("error while trying to create table %T", t), err)
return err
}
}
@@ -95,21 +96,3 @@ func (db *Database) setup() error {
return nil
}
func (db *Database) Insert(t Table) error {
q, err := t.insert()
if err != nil {
return errors.Join(fmt.Errorf("creating query to insert table %T resulted in error", t), err)
}
_, err = db.sql.ExecContext(db.ctx, q)
if err != nil {
return err
}
return nil
}
type Table interface {
setup() string
insert() (string, error)
}