Namų darbas — įrodyk, kad schema nesiskiria
Įrodyk „jokio prasilenkimo" teiginį pats. Būtent šis namų darbas įtvirtina pamoką.
-
Pridėk stulpelį nauja migracija. Migracijos yra papildomos-tik — pritaikytos neredaguoji, pridedi sekančią. Sukurk
db/migrations/00002_user_name.sql:-- +goose Up ALTER TABLE users ADD COLUMN full_name TEXT NOT NULL DEFAULT ''; -- +goose Down ALTER TABLE users DROP COLUMN full_name; -
Generuok iš naujo — ir neliesk Go.
sqlc generateAtsidaryk
internal/db/models.go.Userstruktūra pati užsiauginoFullName stringlauką — nes sqlc perskaitė schemą iš naujo (dabar dvi migracijos), o struktūra yra jos funkcija. Ranka pakeitei nulį Go. -
Dabar pajusk, kaip prasilenkimo apsauga sukanda. Parašyk užklausą, atrenkančią naują stulpelį —
-- name: GetUserName :one\nSELECT full_name FROM users WHERE id = $1;— tada parašyk su klaida kaipfull_name. Paleisksqlc generate:error: column "full_name" does not existKlaida pagaunama generavimo metu, prieš tikrą schemą — ne vykdymo metu, produkcijoje, per vartotojo užklausą. Štai visas pažadas, pademonstruotas: generuotas kodas negali aprašyti lentelės, kurios nėra. Pataisyk klaidą, sugeneruok iš naujo — ir švaru.
-
Perkrauk ir migruok iš naujo.
go run ./cmd/signflow— log rodo pritaikomąOK 00002_user_name.sql. Tavo gyva bazė dabar turi stulpelį; šviežias diegimas pritaikytų abi migracijas nuo nulio.
Kur einam toliau. Turi users lentelę su password_hash stulpeliu, kurio kol kas niekas neužpildo. 4 pamoka pradeda autentifikacijos fazę: registracija su bcrypt slaptažodžių maišymu ir serverio pusės sesijos — sesijos eilutė Postgres, neskaitomas ID HttpOnly slapuke. Tai pirmas kartas, kai SignFlow žino, kas tu esi — ir atsakymo į klausimą, kurį Pica mobilioji programa atsakė kitaip, pradžia: sesijos, ne JWT. 14 pamoka ir yra visas argumentas, kodėl.