Files
codevault/internal/db/secrets.go

43 lines
1016 B
Go

package db
import (
"context"
"database/sql"
"errors"
"fmt"
)
var ErrNotFound = errors.New("secret not found")
type SecretsRepository struct {
db *sql.DB
}
func NewSecretsRepository(db *sql.DB) *SecretsRepository {
return &SecretsRepository{db: db}
}
func (r *SecretsRepository) Get(ctx context.Context, code string) (string, error) {
var value string
err := r.db.QueryRowContext(ctx, "SELECT value FROM secrets WHERE code = ?", code).Scan(&value)
if errors.Is(err, sql.ErrNoRows) {
return "", ErrNotFound
}
if err != nil {
return "", fmt.Errorf("could not get secret: %w", err)
}
return value, nil
}
func (r *SecretsRepository) Set(ctx context.Context, code, value string) error {
_, err := r.db.ExecContext(ctx, `
INSERT INTO secrets (code, value, updated_at)
VALUES (?, ?, CURRENT_TIMESTAMP)
ON CONFLICT(code) DO UPDATE SET value = excluded.value, updated_at = CURRENT_TIMESTAMP
`, code, value)
if err != nil {
return fmt.Errorf("could not set secret: %w", err)
}
return nil
}