Sujunk bazę — main, handlers, home
Dabar sujunk dalis. Trys pakeitimai, skirtukai, sekant duomenis nuo šaltinio į išorę: main.go → handlers.go → home.templ (paleisk bazę, duok apdorotojams užklausas, parodyk skaičių). Diff'ai rodo tik tai, kas pasikeitė; viskas iš 1–2 pamokų perkelta.
1. cmd/signflow/main.go (modify) — tarp config ir aptarnavimo įsiterpia du žingsniai: paleidžiam migracijas, tada atidarom telkinį.
if err := runMigrations(cfg.DatabaseURL, log); err != nil { // goose Up, įterptos
return err
}
pool, err := db.Connect(ctx, cfg.DatabaseURL) // pgx telkinys
// ...
queries := db.New(pool)
h := handlers.New(cfg, queries, log) // ← dabar ima queries
runMigrations naudoja goose database/sql rankeną (per pgx stdlib tvarkyklę) įterptoms migracijoms pritaikyti, tada programa veikia ant pgx telkinio. Statinių failų / aptarnavimo / išjungimo kodas žemiau nepakito.
2. internal/handlers/handlers.go (modify) — struktūra gauna Queries lauką, New jį ima, o Home nuskaito skaičių:
count, err := h.Queries.CountUsers(r.Context())
// ...
render(w, r, http.StatusOK, web.Home(count))
Health dabar taip pat pingina bazę — nepasiekiama bazė praneša 503 nesveika, o ne tyliai aptarnauja 500-us.
3. internal/web/home.templ (modify) — Home užsiaugina parametrą ir eilutę:
templ Home(userCount int64) { // ← buvo Home()
...
Registered users in the database: <strong>{ strconv.FormatInt(userCount, 10) }</strong>
Patikrink. Sukurk bazę, tada paleisk (atmink: templ generate dėl home pakeitimo, sqlc generate, jei dar nepaleidai):
createdb signflow
templ generate
go run ./cmd/signflow
Paleidimas dabar užrašo pritaikomą migraciją:
level=INFO msg="starting signflow" env=dev port=8080 base_url=http://localhost:8080
level=INFO msg=goose msg="OK 00001_users.sql"
level=INFO msg=listening addr=:8080
Atsidaryk http://localhost:8080 — būsenos kortelė dabar rodo „Registered users in the database: 0", gyvai iš Postgres. Įterpk vieną ranka ir perkrauk:
$ psql signflow -c "INSERT INTO users (email, password_hash) VALUES ('a@b.co', 'x');"
INSERT 0 1
Perkrauk puslapį → „Registered users in the database: 1". Skaičius atėjo iš bazės per tavo sqlc sugeneruotą CountUsers į tipiškai saugų šabloną. Visas stekas sujungtas.
Spąstai (migracija jau pritaikyta). Paleisk
go rundu kartus — antras paleidimas neužrašoOK 00001_users.sql: goose įsimena pritaikytas migracijasgoose_db_versionlentelėje ir jas praleidžia. Būtent to ir norim: migracijos taikomos vieną kartą ir jas saugu paleisti kiekvieną kartą startuojant. Norint pradėti švariai:dropdb signflow && createdb signflow.