Files
relay-server/database/db.go
2025-01-25 15:32:52 +01:00

76 lines
1.5 KiB
Go

package database
import (
"database/sql"
"fmt"
"github.com/joho/godotenv"
_ "github.com/lib/pq"
"log"
"os"
)
func InitDatabase() (*sql.DB, error) {
err := godotenv.Load(".env")
if err != nil {
log.Fatal("Error loading .env file")
}
password := os.Getenv("PG_PASSWORD")
host := os.Getenv("PG_HOST")
connStr := fmt.Sprintf("user=postgres host=%s dbname=relay password=%s sslmode=disable", host, password)
DB, err := sql.Open("postgres", connStr)
if err != nil {
log.Fatal(err)
}
return DB, nil
}
func GetUsers(db *sql.DB) ([]string, error) {
query := `SELECT username FROM accounts;`
rows, err := db.Query(query)
if err != nil {
log.Fatal(err)
}
var users []string
for rows.Next() {
var user string
if err := rows.Scan(&user); err != nil {
return nil, err
}
users = append(users, user)
}
return users, err
}
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, fmt.Errorf("error checking username exists: %v", err)
}
return count > 0, err
}
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 "", fmt.Errorf("error inserting user: %v", err)
}
return userId, err
}