feat(repo): create projects

This commit is contained in:
Guz
2025-06-09 19:24:59 -03:00
parent 0c87bcbf3d
commit 991db9ea7a

View File

@@ -6,6 +6,7 @@ import (
"errors"
"log/slog"
"forge.capytal.company/capytalcode/project-comicverse/model"
"forge.capytal.company/loreddev/x/tinyssert"
)
@@ -39,3 +40,44 @@ func NewProjectRepository(ctx context.Context, db *sql.DB, log *slog.Logger, ass
return &ProjectRepository{baseRepostiory: b}, nil
}
func (repo ProjectRepository) Create(p model.Project) error {
repo.assert.NotNil(repo.db)
repo.assert.NotNil(repo.ctx)
repo.assert.NotNil(repo.ctx)
if err := p.Validate(); err != nil {
return errors.Join(ErrInvalidData, err)
}
tx, err := repo.db.BeginTx(repo.ctx, nil)
if err != nil {
return errors.Join(ErrDatabaseConn, err)
}
q := `
INSERT INTO users (uuid, title, created_at, updated_at)
VALUES (:uuid, :title, :created_at, :updated_at)
`
log := repo.log.With(slog.String("uuid", p.UUID.String()), slog.String("query", q))
log.DebugContext(repo.ctx, "Inserting new project")
_, err = tx.ExecContext(repo.ctx, q,
sql.Named("uuid", p.UUID),
sql.Named("title", p.Title),
sql.Named("created_at", p.DateCreated.Format(dateFormat)),
sql.Named("updated_at", p.DateUpdated.Format(dateFormat)),
)
if err != nil {
log.ErrorContext(repo.ctx, "Failed to insert project", slog.String("error", err.Error()))
return errors.Join(ErrExecuteQuery, err)
}
if err := tx.Commit(); err != nil {
log.ErrorContext(repo.ctx, "Failed to commit transaction", slog.String("error", err.Error()))
return errors.Join(ErrCommitQuery, err)
}
return nil
}