From 16322b3afd8b9a4fc532e12e056acdd7b5672c96 Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L de Mello" Date: Fri, 30 May 2025 18:05:24 -0300 Subject: [PATCH] revert: remove database abstraction --- cmd/cmd.go | 15 +++-- database/database.go | 98 --------------------------- database/projects.go | 156 ------------------------------------------- service/projects.go | 7 +- service/service.go | 1 - 5 files changed, 11 insertions(+), 266 deletions(-) delete mode 100644 database/database.go delete mode 100644 database/projects.go diff --git a/cmd/cmd.go b/cmd/cmd.go index 41b6417..48d59f0 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -68,13 +68,6 @@ func init() { func main() { ctx := context.Background() - assertions := tinyssert.NewDisabledAssertions() - if *dev { - assertions = tinyssert.NewAssertions(tinyssert.Opts{ - Panic: true, - }) - } - level := slog.LevelError if *dev { level = slog.LevelDebug @@ -83,6 +76,14 @@ func main() { } log := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level})) + assertions := tinyssert.NewDisabled() + if *dev { + assertions = tinyssert.New( + tinyssert.WithPanic(), + tinyssert.WithLogger(log), + ) + } + db, err := sql.Open("libsql", databaseURL) if err != nil { log.Error("Failed open connection to database", slog.String("error", err.Error())) diff --git a/database/database.go b/database/database.go deleted file mode 100644 index 453f3c5..0000000 --- a/database/database.go +++ /dev/null @@ -1,98 +0,0 @@ -package database - -import ( - "context" - "database/sql" - "errors" - "log/slog" - - "forge.capytal.company/loreddev/x/tinyssert" -) - -var ErrNoRows = sql.ErrNoRows - -type Database struct { - sql *sql.DB - ctx context.Context - - assert tinyssert.Assertions - log *slog.Logger -} - -func New(cfg Config) (*Database, error) { - if cfg.SQL == nil { - return nil, errors.New("SQL database interface should not be nil") - } - if cfg.Context == nil { - return nil, errors.New("context interface should not be nil") - } - if cfg.Assertions == nil { - return nil, errors.New("assertions interface should not be nil") - } - if cfg.Logger == nil { - return nil, errors.New("logger should not be a nil pointer") - } - - db := &Database{ - sql: cfg.SQL, - ctx: cfg.Context, - - assert: cfg.Assertions, - log: cfg.Logger, - } - - if err := db.setup(); err != nil { - return nil, errors.Join(errors.New("error while setting up Database struct"), err) - } - - return db, nil -} - -type Config struct { - SQL *sql.DB - Context context.Context - - Assertions tinyssert.Assertions - Logger *slog.Logger -} - -func (db *Database) setup() error { - db.assert.NotNil(db.sql) - db.assert.NotNil(db.ctx) - db.assert.NotNil(db.log) - - log := db.log - log.Info("Setting up database") - - log.Debug("Pinging database") - - err := db.sql.PingContext(db.ctx) - if err != nil { - return errors.Join(errors.New("unable to ping database"), err) - } - - log.Debug("Creating tables") - - tx, err := db.sql.BeginTx(db.ctx, nil) - if err != nil { - return errors.Join(errors.New("unable to start transaction to create tables"), err) - } - - setups := []func(*sql.Tx) error{ - db.setupProjects, - } - - for _, setup := range setups { - err := setup(tx) - if err != nil { - return err - } - } - - err = tx.Commit() - if err != nil { - return errors.Join(errors.New("unable to run transaction to create tables"), err) - } - - return nil -} diff --git a/database/projects.go b/database/projects.go deleted file mode 100644 index 6d9f9eb..0000000 --- a/database/projects.go +++ /dev/null @@ -1,156 +0,0 @@ -package database - -import ( - "database/sql" - "errors" - "fmt" - "log/slog" -) - -type Project struct { - ID string - Title string -} - -func (db *Database) setupProjects(tx *sql.Tx) error { - db.assert.NotNil(tx) - db.assert.NotNil(db.ctx) - - q := `CREATE TABLE IF NOT EXISTS projects ( - id TEXT PRIMARY KEY NOT NULL, - title TEXT NOT NULL -) STRICT` - _, err := tx.ExecContext(db.ctx, q) - if err != nil { - return errors.Join(errors.New(`unable to execute create query to table "projects"`), err) - } - return nil -} - -func (db *Database) CreateProject(id string, title string) (Project, error) { - db.assert.NotNil(db.sql) - db.assert.NotNil(db.ctx) - db.assert.NotNil(db.log) - db.assert.NotZero(id) - db.assert.NotZero(title) - - q := fmt.Sprintf(`INSERT INTO projects (id, title) VALUES ('%s', '%s')`, id, title) - - db.log.Debug("Inserting into Projects", slog.String("query", q)) - - tx, err := db.sql.BeginTx(db.ctx, nil) - if err != nil { - return Project{}, err - } - - _, err = tx.ExecContext(db.ctx, q) - if err != nil { - return Project{}, err - } - - err = tx.Commit() - if err != nil { - return Project{}, err - } - - return Project{ID: id, Title: title}, nil -} - -func (db *Database) GetProject(id string) (Project, error) { - db.assert.NotNil(db.sql) - db.assert.NotNil(db.ctx) - db.assert.NotNil(db.log) - - q := fmt.Sprintf(`SELECT id, title FROM projects WHERE id = '%s'`, id) - - db.log.Debug("Getting Project", slog.String("query", q)) - - tx, err := db.sql.BeginTx(db.ctx, nil) - if err != nil { - return Project{}, err - } - - row := tx.QueryRowContext(db.ctx, q) - - p := Project{} - err = row.Scan(&p.ID, &p.Title) - if err != nil { - return p, err - } - - err = tx.Commit() - if err != nil { - return p, err - } - - return p, nil -} - -func (db *Database) ListProjects() ([]Project, error) { - db.assert.NotNil(db.sql) - db.assert.NotNil(db.ctx) - db.assert.NotNil(db.log) - - q := `SELECT id, title FROM projects` - - db.log.Debug("Listing Projects", slog.String("query", q)) - - tx, err := db.sql.BeginTx(db.ctx, nil) - if err != nil { - return []Project{}, err - } - - rows, err := tx.QueryContext(db.ctx, q) - if err != nil { - db.assert.Nil(tx.Rollback()) - return []Project{}, err - } - - ps := []Project{} - for rows.Next() { - p := Project{} - - err := rows.Scan(&p.ID, &p.Title) - if err != nil { - db.assert.Nil(tx.Rollback()) - return ps, err - } - - ps = append(ps, p) - } - - err = tx.Commit() - if err != nil { - return ps, err - } - - return ps, nil -} - -func (db *Database) DeleteProject(id string) error { - db.assert.NotNil(db.sql) - db.assert.NotNil(db.ctx) - db.assert.NotNil(db.log) - db.assert.NotZero(id) - - q := fmt.Sprintf(`DELETE FROM projects WHERE id = '%s'`, id) - - db.log.Debug("Deleting from Projects", slog.String("query", q)) - - tx, err := db.sql.BeginTx(db.ctx, nil) - if err != nil { - return err - } - - _, err = tx.ExecContext(db.ctx, q) - if err != nil { - return err - } - - err = tx.Commit() - if err != nil { - return err - } - - return nil -} diff --git a/service/projects.go b/service/projects.go index f938b96..db9b415 100644 --- a/service/projects.go +++ b/service/projects.go @@ -8,7 +8,6 @@ import ( "io" "log/slog" - "forge.capytal.company/capytalcode/project-comicverse/database" "forge.capytal.company/capytalcode/project-comicverse/internals/randstr" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go-v2/service/s3/types" @@ -76,9 +75,9 @@ func (s *Service) GetProject(id string) (Project, error) { s.assert.NotZero(id) res, err := s.db.GetProject(id) - if errors.Is(err, database.ErrNoRows) { - return Project{}, errors.Join(ErrProjectNotExists, err) - } + // if errors.Is(err, database.ErrNoRows) { + // return Project{}, errors.Join(ErrProjectNotExists, err) + // } if err != nil { return Project{}, err } diff --git a/service/service.go b/service/service.go index b1aca8c..0d9b152 100644 --- a/service/service.go +++ b/service/service.go @@ -5,7 +5,6 @@ import ( "errors" "log/slog" - "forge.capytal.company/capytalcode/project-comicverse/database" "forge.capytal.company/loreddev/x/tinyssert" "github.com/aws/aws-sdk-go-v2/service/s3" )