feat: Phase 2 — database layer

- PostgreSQL schema: sources, manga, chapters, pages, source_meta with indexes
- golang-migrate runner with embedded SQL via go:embed (pgx5:// scheme)
- sqlc-generated type-safe queries for all tables (pgx/v5 native)
- Config package with all env vars including TTL durations
- Wire DB init and config into cmd/server/main.go
This commit is contained in:
achmad
2026-05-10 21:32:40 +07:00
parent 85d2ea6143
commit 95cab106d8
20 changed files with 1291 additions and 139 deletions
+15 -4
View File
@@ -1,22 +1,33 @@
package main
import (
"context"
"fmt"
"log"
"net/http"
_ "goyomi/internal/registry" // ensures registry package is initialized
"goyomi/internal/config"
"goyomi/internal/db"
_ "goyomi/internal/registry"
)
func main() {
cfg := config.Load()
ctx := context.Background()
database, err := db.Open(ctx)
if err != nil {
log.Fatalf("db: %v", err)
}
defer database.Close()
mux := http.NewServeMux()
mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "ok")
})
addr := ":8080"
log.Printf("listening on %s", addr)
if err := http.ListenAndServe(addr, mux); err != nil {
log.Printf("listening on %s", cfg.Addr)
if err := http.ListenAndServe(cfg.Addr, mux); err != nil {
log.Fatal(err)
}
}