package database import ( "database/sql" "errors" "github.com/google/uuid" _ "github.com/lib/pq" "relay-server/utils" ) func CheckUserExists(db *sql.DB, username string) (bool, error) { query := `SELECT COUNT(1) FROM accounts WHERE username = $1` var count int err := db.QueryRow(query, username).Scan(&count) if err != nil { return false, utils.NewError(utils.ErrInternal, "Failed to check user existence", err) } return count > 0, nil } func InsertUser(db *sql.DB, username string, passwordHash string) (string, error) { query := ` INSERT INTO Accounts (username, password_hash) VALUES ($1, $2) RETURNING user_id; ` var userID string err := db.QueryRow(query, username, passwordHash).Scan(&userID) if err != nil { return "", utils.NewError(utils.ErrInternal, "Failed to create user", err) } return userID, nil } func GetPasswordHash(db *sql.DB, username string) (string, error) { query := ` SELECT password_hash FROM Accounts WHERE LOWER(username) = LOWER($1); ` var passwordHash string err := db.QueryRow(query, username).Scan(&passwordHash) if err != nil { if errors.Is(err, sql.ErrNoRows) { return "", utils.NewError(utils.ErrNotFound, "User not found", nil) } return "", utils.NewError(utils.ErrInternal, "Failed to get user credentials", err) } return passwordHash, nil } func GetUserID(db *sql.DB, username string) (uuid.UUID, error) { query := ` SELECT user_id FROM Accounts WHERE LOWER(username) = LOWER($1); ` var userID uuid.UUID err := db.QueryRow(query, username).Scan(&userID) if err != nil { if errors.Is(err, sql.ErrNoRows) { return uuid.Nil, utils.NewError(utils.ErrNotFound, "User not found", nil) } return uuid.Nil, utils.NewError(utils.ErrInternal, "Failed to get user ID", err) } return userID, nil }