Skip to content

Commit 1c5ad31

Browse files
committed
chore: better checkpoints
1 parent dfceb35 commit 1c5ad31

3 files changed

Lines changed: 96 additions & 45 deletions

File tree

docs/5_transactions_applications/0_intro.md

Lines changed: 2 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,7 @@ Ein Ticket wird in einer Anwendung selten als einzelne Tabellenzeile behandelt.
44

55
Genau an dieser Stelle werden Transaktionen im Anwendungscode wichtig. Eine Transaktion beantwortet nicht nur die Frage, ob PostgreSQL `COMMIT` oder `ROLLBACK` ausführt. Sie beantwortet vor allem die fachliche Frage: Welche Änderungen gehören so eng zusammen, dass sie nur gemeinsam dauerhaft gespeichert werden dürfen?
66

7-
In Block 2 hast du `db-2-app` als Starterprojekt kennengelernt. Die Anwendung konnte Tickets lesen und erstellen. Für Block 3 bleibt der normale Lernpfad gleich: Du startest beim Starter und entwickelst weiter. Falls du mitten im Modul einsteigst oder eine Lösung anschauen musst, kannst du einen Checkpoint erzeugen:
8-
9-
```bash
10-
cd db-2-app
11-
./course-state create block-3-start ../work/db-2-app-block-3
12-
./course-state create block-3-complete ../work/db-2-app-block-3-loesung
13-
```
14-
15-
Der Checkpoint ist eine normale Arbeitskopie. Er ersetzt nicht den Unterrichtsweg, sondern macht definierte Zustände reproduzierbar.
7+
In Block 2 hast du `db-2-app` als Starterprojekt kennengelernt. Die Anwendung konnte Tickets lesen und erstellen. Für Block 3 bleibt der normale Lernpfad gleich: Du startest beim Starter und entwickelst weiter. Falls du mitten im Modul einsteigst, nutzt du den Checkpoint `block-3-start`. Das Checkpoint-System wird im separaten Abschnitt **Checkpoints** erklärt.
168

179
:::{important} Lernziele
1810
Nach diesem Block kannst du:
@@ -28,7 +20,7 @@ Nach diesem Block kannst du:
2820

2921
## Warum Transaktionen in der Anwendung?
3022

31-
PostgreSQL kennt Transaktionen seit DB-1: Änderungen werden entweder dauerhaft gemacht oder verworfen. In DB-2 interessiert uns, wo diese Entscheidung im Anwendungscode liegt.
23+
Transaktionen kennst du seit DB-1: Änderungen werden entweder dauerhaft gemacht oder verworfen. In DB-2 interessiert uns, wo diese Entscheidung im Anwendungscode liegt.
3224

3325
Betrachte einen einfachen Ticket-Workflow:
3426

@@ -218,41 +210,6 @@ sequenceDiagram
218210

219211
Optimistic Locking verhindert nicht, dass zwei Personen gleichzeitig arbeiten. Es verhindert, dass eine Anwendung unbemerkt auf veraltetem Stand speichert. Die fachliche Reaktion bleibt Aufgabe der Anwendung: neu laden, Konflikt melden oder Benutzerin entscheiden lassen.
220212

221-
## Checkpoint-System für diesen Block
222-
223-
Das Checkpoint-System ist bewusst nicht Git-basiert. Es verwendet normale Dateien in Overlays:
224-
225-
```text
226-
db-2-app/course/
227-
├── states.yml
228-
└── overlays/
229-
├── block-2-complete/
230-
└── block-3-complete/
231-
```
232-
233-
Die Zustände bauen aufeinander auf:
234-
235-
| Zustand | Verwendung |
236-
| --- | --- |
237-
| `block-2-start` | Normaler Starter für Block 2 |
238-
| `block-2-complete` | Lösung der V2-Migration |
239-
| `block-3-start` | Einstieg in Block 3 |
240-
| `block-3-complete` | Lösung mit Transaktionsworkflow |
241-
242-
Für den normalen Unterricht beginnst du im Starter. Für Quereinstieg oder Lösungseinsicht erzeugst du eine Kopie:
243-
244-
```bash
245-
./course-state create block-3-start ../work/db-2-app-block-3
246-
```
247-
248-
Dozierende können alle definierten Zustände prüfen:
249-
250-
```bash
251-
./course-state validate --skip-slow
252-
```
253-
254-
Ohne `--skip-slow` werden auch Testcontainers-Tests ausgeführt, sofern Docker oder Podman verfügbar ist.
255-
256213
## Review-Fragen für Block 3
257214

258215
Beim Lesen eines Transaktionsablaufs helfen diese Fragen:

docs/checkpoints.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# Checkpoints
2+
3+
Das Kursprojekt `db-2-app` ist der normale Startpunkt für die Arbeit im Unterricht. Du beginnst im Starter, entwickelst Schritt für Schritt weiter und löst die Aufgaben im Verlauf der Blöcke. Checkpoints helfen, wenn du später einsteigst, etwas nacharbeiten möchtest oder eine Lösung kontrolliert anschauen musst.
4+
5+
Ein Checkpoint erzeugt eine normale Arbeitskopie des Projekts in einem frei wählbaren Zielordner. Diese Kopie kannst du öffnen, testen, verändern oder löschen, ohne den Starter zu überschreiben.
6+
7+
## Überblick
8+
9+
Ein Checkpoint beschreibt einen definierten Stand von `db-2-app`. Der erzeugte Zielordner ist ein vollständiges Maven-Projekt mit eigener Projektkopie.
10+
11+
Du verwendest Checkpoints in drei Situationen:
12+
13+
- Du steigst mitten in einen Block ein.
14+
- Du möchtest einen früheren Stand nacharbeiten.
15+
- Du möchtest eine Lösung separat anschauen.
16+
17+
Der Starter bleibt dabei unverändert. Für die normale Arbeit im Unterricht brauchst du keinen Checkpoint.
18+
19+
## Grundbefehle
20+
21+
Alle Befehle werden im Ordner `db-2-app` ausgeführt.
22+
23+
Verfügbare Zustände anzeigen:
24+
25+
```bash
26+
./course-state list
27+
```
28+
29+
Einen Zustand in einen Zielordner erzeugen:
30+
31+
```bash
32+
./course-state create <state> <ziel>
33+
```
34+
35+
Einen einzelnen Zustand materialisieren und testen:
36+
37+
```bash
38+
./course-state test <state>
39+
```
40+
41+
Alle definierten Zustände prüfen:
42+
43+
```bash
44+
./course-state validate --skip-slow
45+
```
46+
47+
Ohne `--skip-slow` werden auch langsamere Testcontainers-Tests ausgeführt, sofern Docker oder Podman verfügbar ist.
48+
49+
## Aktuelle Zustände
50+
51+
| Zustand | Verwendung |
52+
| --- | --- |
53+
| `block-2-start` | Normaler Starter für Block 2 |
54+
| `block-2-complete` | Lösung der V2-Migration für Ticket-Regeln |
55+
| `block-3-start` | Einstieg in Block 3 auf Basis des abgeschlossenen Block 2 |
56+
| `block-3-complete` | Lösung mit Transaktionsworkflow, Kommentaren, Events und Versionierung |
57+
58+
Die Liste wird erweitert, sobald weitere Blöcke vollständige App-Zustände brauchen.
59+
60+
## Praxisbeispiele
61+
62+
Für den normalen Unterricht arbeitest du direkt im Starter weiter. Wenn du aber in Block 3 quer einsteigst, erzeugst du eine eigene Arbeitskopie:
63+
64+
```bash
65+
./course-state create block-3-start ../work/db-2-app-block-3
66+
```
67+
68+
Wenn du die Lösung zu Block 3 anschauen möchtest, erzeugst du eine separate Lösungskopie:
69+
70+
```bash
71+
./course-state create block-3-complete ../work/db-2-app-block-3-loesung
72+
```
73+
74+
Die Zielordner sind Beispiele. Entscheidend ist, dass der Zielordner ausserhalb von `db-2-app` liegt. Dadurch bleibt der Starter unverändert.
75+
76+
## Zustände prüfen
77+
78+
Wenn du kontrollieren möchtest, ob ein Zustand korrekt erzeugt wird, kannst du ihn testen:
79+
80+
```bash
81+
./course-state test block-3-start
82+
```
83+
84+
Alle definierten Zustände prüfst du mit:
85+
86+
```bash
87+
./course-state validate --skip-slow
88+
```
89+
90+
Diese Prüfung erzeugt temporäre Arbeitskopien und führt die für den jeweiligen Zustand vorgesehenen Tests aus.

docs/myst.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ project:
3030
file: 7_query_design/0_intro.md
3131
- title: Performance und typische ORM-Probleme
3232
file: 8_performance_orm/0_intro.md
33+
- title: Checkpoints
34+
file: checkpoints.md
3335
license: CC-BY-SA-4.0
3436
open_access: true
3537
site:
@@ -39,6 +41,8 @@ site:
3941
url: https://database-development.erhardt.consulting/extras/#/slides
4042
- title: Übungsaufgaben
4143
url: https://database-development.erhardt.consulting/extras/#/exercises
44+
- title: Checkpoints
45+
url: /checkpoints
4246
options:
4347
logo_text: Database Development
4448
hide_outline: true

0 commit comments

Comments
 (0)