Files
relay-server/database/auth.go
2025-02-11 16:34:59 +01:00

73 lines
1.8 KiB
Go

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
}