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