feat(repo,user): add IDs to users

This commit is contained in:
Guz
2025-06-10 14:46:09 -03:00
parent 00441f9844
commit 3690a4046b

View File

@@ -27,7 +27,8 @@ func NewUserRepository(
assert.NotNil(logger)
_, err := db.Exec(`CREATE TABLE IF NOT EXISTS users (
username TEXT NOT NULL PRIMARY KEY,
id TEXT NOT NULL PRIMARY KEY,
username TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
@@ -54,11 +55,14 @@ func (repo *UserRepository) Create(u model.User) (model.User, error) {
}
q := `
INSERT INTO users (username, password_hash, created_at, updated_at)
VALUES (:username, :password_hash, :created_at, :updated_at)
INSERT INTO users (id, username, password_hash, created_at, updated_at)
VALUES (:id, :username, :password_hash, :created_at, :updated_at)
`
log := repo.log.With(slog.String("username", u.Username), slog.String("query", q))
log := repo.log.With(
slog.String("id", u.ID.String()),
slog.String("username", u.Username),
slog.String("query", q))
log.DebugContext(repo.ctx, "Inserting new user")
t := time.Now()
@@ -66,6 +70,7 @@ func (repo *UserRepository) Create(u model.User) (model.User, error) {
passwd := base64.URLEncoding.EncodeToString(u.Password)
_, err = tx.ExecContext(repo.ctx, q,
sql.Named("id", u.ID),
sql.Named("username", u.Username),
sql.Named("password_hash", passwd),
sql.Named("created_at", t.Format(dateFormat)),
@@ -89,32 +94,35 @@ func (repo *UserRepository) GetByUsername(username string) (model.User, error) {
repo.assert.NotNil(repo.ctx)
q := `
SELECT username, password_hash, created_at, updated_at FROM users
SELECT id, username, password_hash, created_at, updated_at FROM users
WHERE username = :username
`
log := repo.log.With(slog.String("username", username), slog.String("query", q))
log := repo.log.With(
slog.String("username", username),
slog.String("query", q))
log.DebugContext(repo.ctx, "Querying user")
row := repo.db.QueryRowContext(repo.ctx, q, sql.Named("username", username))
var password_hash, dateCreated, dateUpdated string
err := row.Scan(&username, &password_hash, &dateCreated, &dateUpdated)
var user model.User
var password_hashStr, createdStr, updatedStr string
err := row.Scan(&user.ID, &user.Username, &password_hashStr, &createdStr, &updatedStr)
if err != nil {
return model.User{}, errors.Join(ErrExecuteQuery, err)
}
passwd, err := base64.URLEncoding.DecodeString(password_hash)
passwd, err := base64.URLEncoding.DecodeString(password_hashStr)
if err != nil {
return model.User{}, errors.Join(ErrInvalidOutput, err)
}
c, err := time.Parse(dateFormat, dateCreated)
c, err := time.Parse(dateFormat, createdStr)
if err != nil {
return model.User{}, errors.Join(ErrInvalidOutput, err)
}
u, err := time.Parse(dateFormat, dateUpdated)
u, err := time.Parse(dateFormat, updatedStr)
if err != nil {
return model.User{}, errors.Join(ErrInvalidOutput, err)
}
@@ -138,13 +146,13 @@ func (repo *UserRepository) Delete(u model.User) error {
}
q := `
DELETE FROM users WHERE username = :username
DELETE FROM users WHERE id = :id
`
log := repo.log.With(slog.String("username", u.Username), slog.String("query", q))
log := repo.log.With(slog.String("id", u.ID.String()), slog.String("query", q))
log.DebugContext(repo.ctx, "Deleting user")
_, err = tx.ExecContext(repo.ctx, q, sql.Named("username", u.Username))
_, err = tx.ExecContext(repo.ctx, q, sql.Named("id", u.ID))
if err != nil {
log.ErrorContext(repo.ctx, "Failed to delete user", slog.String("error", err.Error()))
return errors.Join(ErrExecuteQuery, err)