seed.go
| 1 | package store |
| 2 | |
| 3 | import "context" |
| 4 | |
| 5 | // Seed legt einige Beispieleinträge an, aber nur in einer leeren Datenbank. |
| 6 | // Sie zeigen, wie Einträge aufgebaut und verknüpft werden, und dürfen gelöscht werden. |
| 7 | func (s *Store) Seed(ctx context.Context) (bool, error) { |
| 8 | var n int |
| 9 | if err := s.db.QueryRowContext(ctx, `SELECT count(*) FROM entries`).Scan(&n); err != nil { |
| 10 | return false, err |
| 11 | } |
| 12 | if done, _ := s.Setting(ctx, "seeded"); n > 0 || done != "" { |
| 13 | return false, nil |
| 14 | } |
| 15 | |
| 16 | ids := map[string]int64{} |
| 17 | for _, e := range seedEntries { |
| 18 | id, err := s.CreateEntry(ctx, e.Entry) |
| 19 | if err != nil { |
| 20 | return false, err |
| 21 | } |
| 22 | ids[e.key] = id |
| 23 | } |
| 24 | for _, l := range seedLinks { |
| 25 | if err := s.Link(ctx, ids[l[0]], ids[l[1]]); err != nil { |
| 26 | return false, err |
| 27 | } |
| 28 | } |
| 29 | if err := s.AddSource(ctx, Source{ |
| 30 | EntryID: ids["pt"], Ref: "Eigenes Lehrbuch / Skript (Beispiel)", Page: "S. 123", |
| 31 | Note: "Hier Buch aus der Calibre-Bibliothek eintragen", |
| 32 | }); err != nil { |
| 33 | return false, err |
| 34 | } |
| 35 | hid, err := s.CreateHandout(ctx, "Knie – Sehnenprogramm Woche 1–2", "") |
| 36 | if err != nil { |
| 37 | return false, err |
| 38 | } |
| 39 | for _, k := range []string{"iso", "spanish"} { |
| 40 | if err := s.AddHandoutItem(ctx, hid, ids[k]); err != nil { |
| 41 | return false, err |
| 42 | } |
| 43 | } |
| 44 | return true, s.SetSetting(ctx, "seeded", "1") |
| 45 | } |
| 46 | |
| 47 | type seedEntry struct { |
| 48 | key string |
| 49 | Entry |
| 50 | } |
| 51 | |
| 52 | var seedLinks = [][2]string{ |
| 53 | {"pt", "iso"}, |
| 54 | {"pt", "spanish"}, |
| 55 | {"pt", "decline"}, |
| 56 | {"pt", "visa"}, |
| 57 | {"pt", "proto"}, |
| 58 | {"proto", "iso"}, |
| 59 | {"proto", "spanish"}, |
| 60 | {"proto", "decline"}, |
| 61 | } |
| 62 | |
| 63 | var seedEntries = []seedEntry{ |
| 64 | {"pt", Entry{ |
| 65 | Kind: "krankheitsbild", Title: "Patellatendinopathie (Jumper's Knee)", Region: "Knie", |
| 66 | Tags: "Sehne, Überlastung, Sprungsport, Beispiel", |
| 67 | Summary: "Belastungsabhängiger Schmerz am unteren Patellapol, typisch bei Sprung- und Sprintsportarten.", |
| 68 | Body: `## Befund |
| 69 | - Schmerz lokal am unteren Patellapol, **belastungsabhängig** (Springen, Treppe, tiefe Hocke) |
| 70 | - Typisch: Anlaufschmerz, wird beim Aufwärmen besser, danach / am Folgetag schlechter |
| 71 | - Druckschmerz allein ist wenig spezifisch |
| 72 | |
| 73 | ## Red Flags / Differenzialdiagnosen |
| 74 | - Schwellung, Erguss, Blockaden → an intraartikuläre Ursache denken |
| 75 | - Jugendliche: Sinding-Larsen-Johansson / Osgood-Schlatter |
| 76 | |
| 77 | ## Behandlungsidee |
| 78 | 1. **Belastung steuern**, nicht komplett pausieren (Schmerz während Übung bis ca. 3–4/10 meist akzeptabel, am Folgetag nicht schlechter) |
| 79 | 2. Isometrie zur Schmerzmodulation |
| 80 | 3. Schwere, langsame Kraftübungen (Heavy Slow Resistance) |
| 81 | 4. Energiespeicher-Belastung (Sprünge) schrittweise zurück |
| 82 | 5. Zurück in den Sport |
| 83 | |
| 84 | ## Eigene Notizen |
| 85 | _Hier eigene Erfahrungen ergänzen._`, |
| 86 | }}, |
| 87 | {"visa", Entry{ |
| 88 | Kind: "test", Title: "VISA-P Fragebogen", Region: "Knie", Tags: "Fragebogen, Verlaufskontrolle, Beispiel", |
| 89 | Summary: "Fragebogen zu Symptomen und Funktion bei Patellatendinopathie (0–100, höher = besser). Gut für die Verlaufskontrolle.", |
| 90 | Body: `## Durchführung |
| 91 | Patient füllt 8 Fragen aus (Schmerz, Funktion, Sportfähigkeit). |
| 92 | |
| 93 | ## Interpretation |
| 94 | - 100 = beschwerdefrei |
| 95 | - Verlauf alle 2–4 Wochen dokumentieren`, |
| 96 | }}, |
| 97 | {"iso", Entry{ |
| 98 | Kind: "uebung", Title: "Isometrische Kniestreckung (Wandsitz)", Region: "Knie", |
| 99 | Tags: "Isometrie, Schmerzlinderung, Sehne, Beispiel", |
| 100 | Summary: "Statisches Halten zur Schmerzlinderung bei Sehnenbeschwerden, gut als Einstieg.", |
| 101 | Dosage: "5 × 45 Sekunden halten, 2 Min. Pause, täglich", |
| 102 | Body: `## Ziel |
| 103 | Schmerzmodulation, Belastbarkeit aufbauen. |
| 104 | |
| 105 | ## Progression |
| 106 | Winkel tiefer → einbeinig → mit Zusatzgewicht |
| 107 | |
| 108 | ## Hinweise für Therapeut |
| 109 | Schmerz während der Übung bis etwa 3/10 ist meist in Ordnung.`, |
| 110 | PatientText: `Lehnen Sie sich mit dem Rücken an eine Wand und rutschen Sie langsam nach unten, bis die Knie etwa **60 Grad** gebeugt sind. |
| 111 | |
| 112 | - Halten Sie die Position ruhig, atmen Sie dabei weiter. |
| 113 | - Die Knie zeigen in Richtung der Fußspitzen. |
| 114 | - Ein leichtes Ziehen an der Sehne ist in Ordnung. Wird der Schmerz stärker, gehen Sie weniger tief.`, |
| 115 | }}, |
| 116 | {"spanish", Entry{ |
| 117 | Kind: "uebung", Title: "Spanish Squat", Region: "Knie", |
| 118 | Tags: "Isometrie, Quadrizeps, Sehne, Beispiel", |
| 119 | Summary: "Kniebeuge mit Band hinter den Knien. Belastet den Quadrizeps stark bei wenig Kniescherkräften.", |
| 120 | Dosage: "5 × 45 Sekunden halten", |
| 121 | Body: `## Aufbau |
| 122 | Festes Band (z. B. Gurt) an einem stabilen Pfosten, Band in den Kniekehlen. |
| 123 | |
| 124 | ## Progression |
| 125 | Tiefer → länger halten → dynamisch`, |
| 126 | PatientText: `Legen Sie das Band in die Kniekehlen und lehnen Sie sich nach hinten hinein. Gehen Sie in die Hocke, die **Schienbeine bleiben senkrecht**. |
| 127 | |
| 128 | - Oberkörper aufrecht, Gewicht auf den Fersen. |
| 129 | - Position halten, ruhig weiteratmen.`, |
| 130 | }}, |
| 131 | {"decline", Entry{ |
| 132 | Kind: "uebung", Title: "Kniebeuge auf Schrägbrett (exzentrisch)", Region: "Knie", |
| 133 | Tags: "Exzentrik, Kraft, Sehne, Beispiel", |
| 134 | Summary: "Langsame Kniebeuge auf einem schrägen Brett, betont die Patellarsehne.", |
| 135 | Dosage: "3 × 15 Wiederholungen, 3 Sek. runter", |
| 136 | Body: `## Hinweise |
| 137 | Erst wenn Isometrie gut vertragen wird. Schmerz am Folgetag beobachten.`, |
| 138 | PatientText: `Stellen Sie sich auf das Schrägbrett, Fersen oben. Gehen Sie **langsam (3 Sekunden)** in die Kniebeuge bis etwa 60–70 Grad. |
| 139 | |
| 140 | - Hochkommen mit beiden Beinen. |
| 141 | - Die Knie zeigen in Richtung der Fußspitzen.`, |
| 142 | }}, |
| 143 | {"proto", Entry{ |
| 144 | Kind: "protokoll", Title: "Sehnen-Rehabilitation – Stufenmodell", Region: "Allgemein", |
| 145 | Tags: "Tendinopathie, Belastungsaufbau, Beispiel", |
| 146 | Summary: "Allgemeiner Stufenplan für Sehnenbeschwerden: von Isometrie bis zur Rückkehr in den Sport.", |
| 147 | Body: `| Stufe | Inhalt | Weiter wenn | |
| 148 | |---|---|---| |
| 149 | | 1 | Isometrie, mehrmals täglich | Schmerz während Übung ≤ 3/10 | |
| 150 | | 2 | Schwere, langsame Kraftübungen, 3×/Woche | Kraft steigt, Folgetag stabil | |
| 151 | | 3 | Energiespeicher: Hüpfen, Sprünge | Sprünge schmerzarm | |
| 152 | | 4 | Sportspezifisch, Rückkehr | Volle Belastung toleriert | |
| 153 | |
| 154 | **Regel:** Beschwerden am Folgetag sind der wichtigste Maßstab.`, |
| 155 | }}, |
| 156 | } |
| 157 |