diff --git a/repository/project.go b/repository/project.go new file mode 100644 index 0000000..884c6d3 --- /dev/null +++ b/repository/project.go @@ -0,0 +1,41 @@ +package repository + +import ( + "context" + "database/sql" + "errors" + "log/slog" + + "forge.capytal.company/loreddev/x/tinyssert" +) + +type ProjectRepository struct { + baseRepostiory +} + +func NewProjectRepository(ctx context.Context, db *sql.DB, log *slog.Logger, assert tinyssert.Assertions) (*ProjectRepository, error) { + b := newBaseRepostiory(ctx, db, log, assert) + + tx, err := db.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + + _, err = tx.ExecContext(ctx, ` + CREATE TABLE IF NOT EXISTS projects ( + uuid TEXT NOT NULL PRIMARY KEY, + title TEXT NOT NULL, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + )`) + if err != nil { + return nil, err + } + + if err := tx.Commit(); err != nil { + return nil, errors.Join(errors.New("unable to create project tables"), err) + } + + return &ProjectRepository{baseRepostiory: b}, nil +} +