# Lektion 17 — Repository og databasen

Routes fra lektion 13 og tabellen fra lektion 15 mødes. Forberedelsen er lag
i koden, SQL injection, statuskoder og et lille script, der henter fra din
egen Neon-database. I timen flytter I `server.js` over på et repository med
`pg`, så listen husker, når serveren genstarter. Til sidst kører gruppens
egen handling fra formular til tabel — kernen i D2.

## Forberedelse

Det forventes, at du har forberedt dig — en kort tekst, to lectures,
node-postgres og `hent.js` mod din egen database (ca. 70 min).

[Forberedelse til Lektion 17](forberedelse.md)

## Program (4 timer)

| Tid | Blok | Indhold |
|---|---|---|
| 20 min | Opsamling | Lag i koden, `pg`, `$1` og `.env` |
| 10 min | Quiz | Forberedelsen |
| 25 min | Gennemgang | Repositoryet i `server.js`: `patients.js`, `async` og `500` |
| 10 min | Quiz | Repository og `GET` |
| 35 min | [Øvelse 1](oevelser.md) | **Listen husker** — `GET` fra gruppens tabel i Neon |
| 25 min | Gennemgang | `POST`, `201`/`400`/`500`, SQL injection, `cors` og formularen |
| 10 min | Quiz | `POST`, statuskoder og `$1` |
| 30 min | [Øvelse 2](oevelser.md) | **`POST` og testskemaet** — seks requests fra `api.http` |
| 30 min | [Øvelse 3](oevelser.md) | **Gruppens handling** — fra formular til gruppens egen tabel |

Der er afsat 45 minutter til pauser, som lægges ind undervejs.

## Slides

[Forelæsningsslides](forelaesning.md?show=slide)

## Øvelser

Øvelserne står samlet her, med mere uddybning end på slidesne:

[Øvelser til Lektion 17](oevelser.md)

## Efter timen: deploy til D2

D2 skal køre på en URL på Vercel. Følg vejledningen, når den centrale
brugerhandling virker lokalt:

[Deploy backend til Vercel](deploy.md)

## Efter lektionen kan du

- forklare, hvad et repository er, og hvorfor SQL'en samles ét sted
- forbinde `server.js` til gruppens Neon-database med connection-stringen i `.env`, uden for git
- hente og gemme med parametriseret SQL (`$1`, `$2`) og forklare, hvorfor værdierne ikke klistres ind i SQL-teksten
- svare `201`, `400` og `500` og teste dem fra `api.http`
- vise, at data overlever en genstart af serveren
- køre gruppens centrale brugerhandling fra formular til tabel og forklare, hvorfor browseren først sender et preflight
