migrated out more modules and refactored db system

This commit is contained in:
2026-01-01 21:56:21 +11:00
parent 03095448d6
commit 1e09acdc57
80 changed files with 462 additions and 4992 deletions

View File

@@ -1,31 +1,28 @@
package models
import (
"context"
"database/sql"
"fmt"
"projectreshoot/pkg/db"
"github.com/pkg/errors"
)
// Creates a new user in the database and returns a pointer
func CreateNewUser(
ctx context.Context,
tx *db.SafeWTX,
tx *sql.Tx,
username string,
password string,
) (*User, error) {
query := `INSERT INTO users (username) VALUES (?)`
_, err := tx.Exec(ctx, query, username)
_, err := tx.Exec(query, username)
if err != nil {
return nil, errors.Wrap(err, "tx.Exec")
}
user, err := GetUserFromUsername(ctx, tx, username)
user, err := GetUserFromUsername(tx, username)
if err != nil {
return nil, errors.Wrap(err, "GetUserFromUsername")
}
err = user.SetPassword(ctx, tx, password)
err = user.SetPassword(tx, password)
if err != nil {
return nil, errors.Wrap(err, "user.SetPassword")
}
@@ -34,23 +31,21 @@ func CreateNewUser(
// Fetches data from the users table using "WHERE column = 'value'"
func fetchUserData(
ctx context.Context,
tx db.SafeTX,
tx *sql.Tx,
column string,
value interface{},
value any,
) (*sql.Rows, error) {
query := fmt.Sprintf(
`SELECT
id,
username,
password_hash,
created_at,
bio
FROM users
WHERE %s = ? COLLATE NOCASE LIMIT 1`,
column,
)
rows, err := tx.Query(ctx, query, value)
rows, err := tx.Query(query, value)
if err != nil {
return nil, errors.Wrap(err, "tx.Query")
}
@@ -66,7 +61,6 @@ func scanUserRow(user *User, rows *sql.Rows) error {
err := rows.Scan(
&user.ID,
&user.Username,
&user.Password_hash,
&user.Created_at,
&user.Bio,
)
@@ -78,8 +72,8 @@ func scanUserRow(user *User, rows *sql.Rows) error {
// Queries the database for a user matching the given username.
// Query is case insensitive
func GetUserFromUsername(ctx context.Context, tx db.SafeTX, username string) (*User, error) {
rows, err := fetchUserData(ctx, tx, "username", username)
func GetUserFromUsername(tx *sql.Tx, username string) (*User, error) {
rows, err := fetchUserData(tx, "username", username)
if err != nil {
return nil, errors.Wrap(err, "fetchUserData")
}
@@ -93,8 +87,8 @@ func GetUserFromUsername(ctx context.Context, tx db.SafeTX, username string) (*U
}
// Queries the database for a user matching the given ID.
func GetUserFromID(ctx context.Context, tx db.SafeTX, id int) (*User, error) {
rows, err := fetchUserData(ctx, tx, "id", id)
func GetUserFromID(tx *sql.Tx, id int) (*User, error) {
rows, err := fetchUserData(tx, "id", id)
if err != nil {
return nil, errors.Wrap(err, "fetchUserData")
}
@@ -108,9 +102,9 @@ func GetUserFromID(ctx context.Context, tx db.SafeTX, id int) (*User, error) {
}
// Checks if the given username is unique. Returns true if not taken
func CheckUsernameUnique(ctx context.Context, tx db.SafeTX, username string) (bool, error) {
func CheckUsernameUnique(tx *sql.Tx, username string) (bool, error) {
query := `SELECT 1 FROM users WHERE username = ? COLLATE NOCASE LIMIT 1`
rows, err := tx.Query(ctx, query, username)
rows, err := tx.Query(query, username)
if err != nil {
return false, errors.Wrap(err, "tx.Query")
}