From 05eb5f79cc67bad674551df09bf656163ae441ab Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L de Mello" Date: Tue, 10 Jun 2025 19:01:01 -0300 Subject: [PATCH] feat(repository,token): create token method --- repository/token.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/repository/token.go b/repository/token.go index 50896ea..fbbd54e 100644 --- a/repository/token.go +++ b/repository/token.go @@ -44,3 +44,47 @@ func NewToken(ctx context.Context, db *sql.DB, log *slog.Logger, assert tinysser return &Token{baseRepostiory: b}, nil } +func (repo Token) Create(token model.Token) error { + repo.assert.NotNil(repo.db) + repo.assert.NotNil(repo.ctx) + repo.assert.NotNil(repo.log) + + if err := token.Validate(); err != nil { + return errors.Join(ErrInvalidInput, err) + } + + tx, err := repo.db.BeginTx(repo.ctx, nil) + if err != nil { + return errors.Join(ErrDatabaseConn, err) + } + + q := ` + INSERT INTO tokens (id, user_id, created_at, expires_at) + VALUES (:id, :user_id, :created_at, :expires_at) + ` + + log := repo.log.With(slog.String("id", token.ID.String()), + slog.String("user_id", token.UserID.String()), + slog.String("expires", token.DateExpires.Format(dateFormat)), + slog.String("query", q)) + log.DebugContext(repo.ctx, "Inserting new user token") + + _, err = tx.ExecContext(repo.ctx, q, + sql.Named("id", token.ID), + sql.Named("user_id", token.UserID), + sql.Named("created_at", token.DateCreated.Format(dateFormat)), + sql.Named("expired_at", token.DateExpires.Format(dateFormat)), + ) + if err != nil { + log.ErrorContext(repo.ctx, "Failed to insert token", 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 +} +