Tema
/
Interneto svetainių serverio dalies kūrimas GO

Sujunk bazę — main, handlers, home

Dabar sujunk dalis. Trys pakeitimai, skirtukai, sekant duomenis nuo šaltinio į išorę: main.gohandlers.gohome.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 run du kartus — antras paleidimas neužrašo OK 00001_users.sql: goose įsimena pritaikytas migracijas goose_db_version lentelė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.