73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"github.com/google/uuid"
|
|
_ "github.com/lib/pq"
|
|
"relay-server/helpers"
|
|
)
|
|
|
|
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, helpers.NewError(helpers.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 "", helpers.NewError(helpers.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 "", helpers.NewError(helpers.ErrNotFound, "User not found", nil)
|
|
}
|
|
return "", helpers.NewError(helpers.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, helpers.NewError(helpers.ErrNotFound, "User not found", nil)
|
|
}
|
|
return uuid.Nil, helpers.NewError(helpers.ErrInternal, "Failed to get user ID", err)
|
|
}
|
|
return userID, nil
|
|
}
|