- User registration/login with bcrypt password hashing - SQLite database with goose migrations and sqlc-generated queries - Games and players persisted to database, resumable after restart - Guest play still supported alongside authenticated users - Auth UI components (login/register forms, auth header, guest banner)
34 lines
538 B
Go
34 lines
538 B
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"embed"
|
|
|
|
"github.com/pressly/goose/v3"
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
//go:embed migrations/*.sql
|
|
var migrations embed.FS
|
|
|
|
var DB *sql.DB
|
|
|
|
func Init(dbPath string) error {
|
|
var err error
|
|
DB, err = sql.Open("sqlite", dbPath+"?_journal_mode=WAL&_busy_timeout=5000")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
DB.SetMaxOpenConns(1)
|
|
|
|
goose.SetBaseFS(migrations)
|
|
if err := goose.SetDialect("sqlite3"); err != nil {
|
|
return err
|
|
}
|
|
if err := goose.Up(DB, "migrations"); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|