diff --git a/CLAUDE.md b/CLAUDE.md index cb6cf16..5f78993 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Projekt -**Gartenmanager** – Anwendung zur Verwaltung von Gartenaktivitäten (Pflanzen, Beete, Aussaatkalender, Aufgaben, Bewässerung). +**Gartenmanager** – Docker-basierte Web-Platform zur Verwaltung von Gartenaktivitäten. Multi-User, Multi-Tenant. ## Dokumente – wo was steht @@ -12,42 +12,87 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co |---|---| | [docs/development-standards.md](docs/development-standards.md) | **Alle Regeln:** Branching, Versionierung, Workflow, Coding, Testing | | [docs/project-structure.md](docs/project-structure.md) | **Alle Module & Funktionen** – hier zuerst lesen, bevor Quellcode geöffnet wird | -| [docs/branching-strategy.md](docs/branching-strategy.md) | Branch-Diagramm | | [CHANGELOG.md](CHANGELOG.md) | Versionshistorie | | [VERSION](VERSION) | Aktuelle Versionsnummer | | [.claude/session-context.md](.claude/session-context.md) | **Sessionstart hier lesen:** aktiver Branch, Version, offene Arbeit | -| [.claude/scripts/](.claude/scripts/) | Automatisierungsscripts (bump, new-feature) | ## Techstack -> Noch festzulegen – diese Sektion aktualisieren, sobald der Stack definiert ist. +| Schicht | Technologie | +|---|---| +| Frontend | Vue 3 + Vite + PrimeVue + Pinia + Vue Router | +| Backend | FastAPI (Python 3.11) + Uvicorn | +| ORM | SQLAlchemy 2.x async + Alembic | +| Datenbank | PostgreSQL 15 (asyncpg) | +| Container | Docker Compose (3 Services: db, backend, frontend/nginx) | ## Build & Entwicklung -> Befehle eintragen, sobald Build-System definiert ist. - ```bash -# Abhängigkeiten installieren -# +# Gesamtes System starten (Produktion) +docker compose up -d -# Entwicklungsserver starten -# +# Entwicklungsmodus (mit Hot-Reload) +docker compose -f docker-compose.dev.yml up -# Tests ausführen -# +# Nur Backend lokal starten (setzt laufende DB voraus) +cd backend && uvicorn app.main:app --reload --port 8000 -# Einzelnen Test ausführen -# +# Nur Frontend lokal starten +cd frontend && npm run dev -# Linting -# +# Datenbankmigrationen ausführen +docker compose exec backend alembic upgrade head -# Build für Produktion -# +# Neue Migration erstellen +docker compose exec backend alembic revision --autogenerate -m "beschreibung" -# Version bumpen + commit + push (patch/minor/major) -bash .claude/scripts/bump.sh patch "Beschreibung der Änderung" +# Seed-Daten einspielen +docker compose exec backend python -m app.seeds.initial_data + +# Version bumpen + commit + push +bash .claude/scripts/bump.sh patch "Beschreibung" # Neuen Feature-Branch erstellen -bash .claude/scripts/new-feature.sh +bash .claude/scripts/new-feature.sh feature ``` + +## Architektur + +### Backend (`backend/app/`) + +``` +core/ + config.py – pydantic-settings, liest .env (DATABASE_URL, SECRET_KEY, ...) + security.py – JWT-Erzeugung/-Prüfung (Access 30min, Refresh 7 Tage) + deps.py – FastAPI-Dependencies: get_db, get_current_user, require_role(...) + +db/ + base.py – SQLAlchemy DeclarativeBase + session.py – async Engine + AsyncSession Factory + +models/ – SQLAlchemy ORM-Modelle (alle UUID-PKs, async-kompatibel) +schemas/ – Pydantic v2 Schemas (Create/Update/Read je Entität) +crud/ – CRUD-Funktionen (kein Business-Logik, nur DB-Zugriff) +api/v1/ – FastAPI Router je Ressource +seeds/ – Initiale Pflanzenbibliothek + Kompatibilitätsdaten +``` + +### Tenant-Kontext +Alle Nicht-Auth-Endpoints erwarten Header `X-Tenant-ID: `. Die Dependency `get_current_tenant` prüft Mitgliedschaft des eingeloggten Users. + +### Berechtigungsebenen +`READ_ONLY` → `READ_WRITE` → `TENANT_ADMIN` → `is_superadmin` (User-Flag, überspringt alle Prüfungen) + +### Frontend (`frontend/src/`) +Vue 3 SFC mit PrimeVue-Komponenten, Pinia für State, Axios-Client mit JWT-Interceptor und automatischem Token-Refresh. + +## Pflichtregeln (immer befolgen) + +Vollständige Regeln in [docs/development-standards.md](docs/development-standards.md). Kurzfassung: + +1. **Nie direkt nach `main`** – nur per Pull-Request, nur auf explizite Anweisung +2. **Jede Arbeit in eigenem Branch** unter `develop` (`feature/`, `fix/`, `debug/`) +3. **Nach jeder Änderung:** `bash .claude/scripts/bump.sh` + commit + push +4. **Vor Merge:** README, CHANGELOG, `docs/project-structure.md` prüfen +5. **Branches selbstständig wechseln** – passend zur aktuellen Aufgabe