docs: Add comprehensive session handover document
All checks were successful
Deploy Development / deploy (push) Successful in 35s
All checks were successful
Deploy Development / deploy (push) Successful in 35s
This commit is contained in:
parent
08326bdcc6
commit
b1142070e9
348
.claude/docs/working/HANDOVER_NEXT_SESSION.md
Normal file
348
.claude/docs/working/HANDOVER_NEXT_SESSION.md
Normal file
|
|
@ -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!** 🥋
|
||||||
Loading…
Reference in New Issue
Block a user