Refactor Store into SessionStore; move domain SQL onto User/Question/Answer.

This commit is contained in:
2026-08-22 02:40:51 -07:00
parent f31f352838
commit c77298411e
15 changed files with 696 additions and 876 deletions
+10 -8
View File
@@ -2,6 +2,7 @@ package main
import (
"context"
"database/sql"
"errors"
"log"
"net/http"
@@ -22,29 +23,30 @@ import (
func main() {
_ = godotenv.Load()
st := openStore()
defer st.Close()
db, sessions := openDB()
defer db.Close()
defer sessions.Close()
uploader := blob.FromEnv()
handler := newHandler(st, uploader)
handler := newHandler(db, sessions, uploader)
run(&http.Server{Addr: listenAddr(), Handler: handler})
}
func openStore() *store.Store {
func openDB() (*sql.DB, *store.SessionStore) {
databaseURL := strings.TrimSpace(os.Getenv("DATABASE_URL"))
if databaseURL == "" {
log.Fatal("DATABASE_URL is required")
}
st, err := store.OpenPostgres(databaseURL, plumber.SchemaSQL)
db, sessions, err := store.OpenPostgres(databaseURL, plumber.SchemaSQL)
if err != nil {
log.Fatalf("database: %v", err)
}
log.Printf("database: postgres")
return st
return db, sessions
}
func newHandler(st *store.Store, uploader blob.Uploader) http.Handler {
srv, err := web.New(st, st.SessionStore(), plumber.TemplateFS, plumber.StaticFS, web.Config{
func newHandler(db *sql.DB, sessions *store.SessionStore, uploader blob.Uploader) http.Handler {
srv, err := web.New(db, sessions.Store(), plumber.TemplateFS, plumber.StaticFS, web.Config{
AdminUsername: os.Getenv("ADMIN_USERNAME"),
SecureCookie: os.Getenv("SECURE_COOKIE") == "1",
Blob: uploader,