diff --git a/.claude/docs/working/HANDOVER_NEXT_SESSION.md b/.claude/docs/working/HANDOVER_NEXT_SESSION.md new file mode 100644 index 0000000..5b6f223 --- /dev/null +++ b/.claude/docs/working/HANDOVER_NEXT_SESSION.md @@ -0,0 +1,348 @@ +# Shinkan Jinkendo - Session Handover + +**Datum:** 2026-04-22 +**Kontext:** App-Entwicklung nach Login-Setup - Kern-Features implementieren + +--- + +## 🎯 Projekt-Mission + +**Shinkan Jinkendo** (真観) - Trainer- und Vereinsplattform für Kampfsport-Trainingsplanung. + +**NICHT:** Persönliches Athleten-Tracking (das ist Mitai) +**SONDERN:** Trainer verwalten Vereine, Gruppen, Übungen, Training + +--- + +## 📚 Pflicht-Dokumentation (ZUERST LESEN!) + +### Fachliches Design +``` +c:\Dev\shinkan-jinkendo\.claude\docs\working\SHINKAN_PROJECT_SETUP.md +``` +**Enthält:** +- Domain Model (Clubs, Groups, Skills, Methods, Exercises) +- MVP Features +- Datenbank-Schema +- User Stories + +### Technisches Setup (bereits erstellt von vorheriger Session) +Siehe: `SHINKAN_PROJECT_SETUP.md` - Abschnitte: +- Tech Stack (React 18, FastAPI, PostgreSQL 16, Docker) +- Ports: Dev 3098/8098, Prod 3003/8003 +- Deployment: Gitea Actions auf develop Branch + +### Referenz-Codebase +``` +c:\Dev\mitai-jinkendo\ +``` +**Nutzen für Standards:** +- Router-Struktur (`backend/routers/`) +- Frontend-Patterns (`frontend/src/pages/`) +- CSS-System (`frontend/src/app.css`) + +**⚠️ WARNUNG:** Mitai-Code NICHT blind kopieren! +- Mitai hat AI-Features, Export, komplexes Membership +- Shinkan ist einfacher, andere DB-Spalten +- **Immer Schema prüfen** vor Copy/Paste! + +--- + +## 🔧 Aktueller Stand + +### ✅ Was funktioniert +- **Login/Auth:** lars@stommer.com / 12345678 (admin, premium) +- **Backend API:** http://192.168.2.49:8098 +- **Frontend:** http://192.168.2.49:3098 +- **Datenbank:** + - profiles, sessions (Auth) + - clubs, divisions, training_groups (Organisation) + - skills (12 Einträge), training_methods (8 Einträge) - bereits geseedet! + - exercises, exercise_skills (leer) + +### ❌ Bekannte Probleme + +**1. Navigation erscheint nicht im Browser** +- Code existiert: `frontend/src/components/Navigation.jsx` +- Routes hinzugefügt: ProfilePage, ExercisesPage, ClubsPage +- Deploy erfolgt (Commit c4b1b54) +- **Problem:** Nicht im Browser sichtbar - vermutlich Browser-Cache oder Build-Issue + +**2. Sessions funktionieren nicht** +- User muss sich ständig neu einloggen +- Backend-Fix gepusht (Commit 08326bd) - Mitai-Spalten entfernt +- **Problem:** Unklar ob Fix deployed wurde + +**Erste Aufgabe:** Diese beiden Issues fixen, DANN Features bauen! + +### 📁 Code-Struktur + +``` +c:\Dev\shinkan-jinkendo\ +├── backend/ +│ ├── main.py (FastAPI setup, Router registration) +│ ├── auth.py (Session management, require_auth) +│ ├── db.py (PostgreSQL connection pool) +│ ├── models.py (Pydantic models) +│ ├── routers/ +│ │ ├── auth.py (Login, Register, Logout) +│ │ └── profiles.py (User profile CRUD) +│ └── migrations/ +│ ├── 001_auth_membership.sql +│ ├── 002_organization.sql +│ ├── 003_catalogs.sql (Skills + Methods seeded!) +│ └── 004_add_auth_columns.sql +│ +├── frontend/src/ +│ ├── App.jsx (Routing + ProtectedRoute) +│ ├── context/ +│ │ └── AuthContext.jsx (User state, login/logout) +│ ├── components/ +│ │ └── Navigation.jsx (Header-Menü - NICHT SICHTBAR) +│ ├── pages/ +│ │ ├── LoginPage.jsx (✅ funktioniert) +│ │ ├── Dashboard.jsx (✅ zeigt Welcome) +│ │ ├── ProfilePage.jsx (NEU - Platzhalter) +│ │ ├── ExercisesPage.jsx (NEU - leer) +│ │ └── ClubsPage.jsx (NEU - leer) +│ └── utils/ +│ └── api.js (Zentrale API-Client mit Token-Injektion) +│ +└── .claude/docs/ + └── working/ + └── SHINKAN_PROJECT_SETUP.md (LESEN!) +``` + +--- + +## 🚀 Was JETZT gebaut werden muss (MVP Scope) + +### Phase 1: Core CRUD (Priorität) + +**1. Übungsverwaltung** (Kernobjekt) - 2-3h +- `backend/routers/exercises.py` + - GET /exercises (Liste mit Filter) + - POST /exercises (Create) + - GET /exercises/{id} (Detail) + - PUT /exercises/{id} (Update) + - DELETE /exercises/{id} +- `frontend/src/pages/ExercisesPage.jsx` + - Liste (Tabelle oder Cards) + - Create-Modal/Form + - Edit inline oder Modal + - Delete mit Confirm + +**Schema:** Siehe `migrations/001_auth_membership.sql` - Tabelle `exercises` + +**Felder:** +- title, summary, goal, execution, preparation, trainer_notes +- equipment (JSONB array), duration_min/max, group_size_min/max +- age_groups (JSONB), focus_area, secondary_areas (JSONB) +- training_character, visibility (private/club/public) +- primary_method_id, secondary_method_ids (JSONB) + +**Referenz:** Mitai hat ähnliche CRUD-Pattern in `routers/weight.py`, `routers/activity.py` + +--- + +**2. Vereinsverwaltung** - 1-2h +- `backend/routers/clubs.py` + - CRUD für clubs + - CRUD für divisions (optional) +- `frontend/src/pages/ClubsPage.jsx` + +**Schema:** Siehe `migrations/002_organization.sql` + +--- + +**3. Gruppenverwaltung** - 1-2h +- `backend/routers/groups.py` + - CRUD für training_groups + - Zuordnung zu Clubs + - Trainer-Zuordnung (trainer_id, co_trainer_ids) +- `frontend/src/pages/GroupsPage.jsx` + +--- + +### Phase 2: Kataloge & Zuordnungen (Später) + +**4. Skills & Methods anzeigen** - 0.5h +- `/skills` Route (Read-only, bereits geseedet) +- `/methods` Route (Read-only, bereits geseedet) + +**5. Übungen ↔ Skills verknüpfen** - 1h +- M:N Relationship über `exercise_skills` Tabelle +- UI: Multi-Select für Skills beim Übung-Erstellen + +--- + +## 🔍 Debugging-Checkliste (Vor neuen Features!) + +### Problem: Navigation nicht sichtbar + +```bash +# SSH zum Server +ssh lars@192.168.2.49 + +# Frontend Container prüfen +docker exec dev-shinkan-ui ls -la /usr/share/nginx/html/assets/ +# Erwartung: Datei index-CYNK--85.js oder neuer + +# Prüfen ob Navigation.jsx im Bundle +docker exec dev-shinkan-ui grep -o "Navigation\|Übungen" /usr/share/nginx/html/assets/index-*.js | head -5 + +# Falls nicht: Frontend neu bauen +cd /home/lars/docker/shinkan-dev +git pull +docker compose -f docker-compose.dev-env.yml build --no-cache frontend +docker compose -f docker-compose.dev-env.yml up -d +``` + +### Problem: Sessions funktionieren nicht + +```bash +# Backend Logs prüfen +docker logs dev-shinkan-api --tail 50 | grep -E "error|Error|column.*does not exist" + +# Erwartung: KEINE "column p.ai_enabled does not exist" Fehler mehr + +# Session-Test +curl -X POST http://192.168.2.49:8098/api/auth/login \ + -H "Content-Type: application/json" \ + -d '{"email":"lars@stommer.com","password":"12345678"}' | python3 -m json.tool + +# Erwartung: {"token": "...", "role": "admin", ...} +``` + +--- + +## 🛠️ Entwicklungs-Workflow + +### 1. Feature implementieren (Lokal) + +```bash +# Backend +cd c:\Dev\shinkan-jinkendo +# Router erstellen: backend/routers/exercises.py +# Models ergänzen: backend/models.py +# Router registrieren: backend/main.py + +# Frontend +# Seite erstellen: frontend/src/pages/ExercisesPage.jsx +# API-Funktionen: frontend/src/utils/api.js +# Route in App.jsx +``` + +### 2. Committen & Pushen + +```bash +git add -A +git commit -m "feat: Exercise CRUD implementation" +git push origin develop +``` + +### 3. Gitea Action deployt automatisch + +- Kein manuelles `docker compose` mehr! +- Warte 1-2 Min +- Prüfe: http://192.168.2.49:3098 + +### 4. Testen im Browser + +- Login: lars@stommer.com / 12345678 +- Feature testen +- Console prüfen (F12) bei Fehlern + +--- + +## 📊 Datenbank-Zugriff + +```bash +# SSH +ssh lars@192.168.2.49 + +# PostgreSQL CLI +docker exec -it dev-shinkan-postgres psql -U shinkan_dev -d shinkan_dev + +# Hilfreiche Queries +\d profiles # Schema anzeigen +\d exercises # Exercise-Schema +SELECT * FROM skills; # Alle Skills (12 Einträge) +SELECT * FROM training_methods; # Alle Methods (8 Einträge) +``` + +--- + +## ⚠️ Lessons Learned (Vermeide diese Fehler!) + +### 1. Mitai vs Shinkan Schema +**Problem:** Auth.py von Mitai kopiert, aber Spalten fehlen in Shinkan + +**Fehler:** +- `ai_enabled`, `ai_limit_day`, `export_enabled` - existieren nur in Mitai +- `auth_type`, `verification_expires`, `trial_ends_at` - mussten hinzugefügt werden +- `created` vs `created_at` - unterschiedliche Spaltennamen + +**Regel:** Vor Mitai-Code kopieren → **Schema prüfen**! + +### 2. Frontend-Cache +**Problem:** Code deployed aber nicht sichtbar im Browser + +**Lösung:** +- Browser-Cache leeren (Ctrl+Shift+R) +- Oder `docker compose build --no-cache frontend` + +### 3. Gitea Actions nicht mit manuellen Deploys mischen +**Problem:** Container-Namens-Konflikte + +**Regel:** Nur `git push` → Gitea macht den Rest + +--- + +## 📞 Server-Info + +| System | Wert | +|--------|------| +| **Pi IP** | 192.168.2.49 | +| **Gitea** | http://192.168.2.144:3000/Lars/shinkan-jinkendo | +| **Dev Frontend** | http://192.168.2.49:3098 | +| **Dev Backend** | http://192.168.2.49:8098 | +| **Deploy Path** | /home/lars/docker/shinkan-dev | +| **DB Name** | shinkan_dev | +| **DB User** | shinkan_dev | +| **DB Pass** | dev_password | + +--- + +## 🎯 Erfolgs-Kriterien MVP + +Nach MVP soll User können: + +1. ✅ Login/Logout (erledigt) +2. ⏳ Übungen verwalten (CRUD) +3. ⏳ Vereine anlegen +4. ⏳ Trainingsgruppen anlegen +5. ⏳ Übungen Skills zuordnen +6. ⏳ Skills/Methods katalog ansehen + +**Geschätzte Zeit:** 6-8h für Punkte 2-6 + +--- + +## 🚦 Start-Kommando für neue Session + +``` +Ich übernehme die Entwicklung von Shinkan Jinkendo. + +Kontext gelesen: HANDOVER_NEXT_SESSION.md + +Erste Schritte: +1. Navigation + Sessions debuggen +2. Dann: Exercise CRUD implementieren + +Bitte bestätige dass du bereit bist und zeige mir den aktuellen Status (Container, letzte Commits, bekannte Probleme). +``` + +--- + +**Viel Erfolg!** 🥋