4.6 KiB
4.6 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Verhaltensregeln
- Kein erklärender Text bei Routineaufgaben (Commits, Pushes, Branch-Wechsel)
- Bei Fehlern: erst 2x selbst versuchen, dann fragen
- Branches selbstständig wechseln wie benötigt
Sprache & Konventionen
- Code-Bezeichner, Commit-Messages: Englisch, Imperativ (
Add,Fix,Refactor) - Dokumentation & Kommentare: Deutsch
- Commit-Format:
<type>: <short description>(max. 72 Zeichen)
Types:feat|fix|refactor|test|docs|chore - Nach jedem Commit sofort pushen
- Keine
console.log/printin Produktionscode, keine auskommentierten Code-Blöcke
Projektkontext (Schnelleinstieg)
Gartenmanager – Docker-basierte Gartenverwaltung. Multi-User, Multi-Tenant, Rollensystem.
Stack: Vue 3 + PrimeVue → FastAPI (Python 3.11) → PostgreSQL 15
Phase: 1 abgeschlossen (Auth, Beete, Pflanzen, Bepflanzung). Phase 2 = Testing & CI/CD.
Version: cat VERSION | Branch: git branch --show-current
Sessionstart: .claude/session-context.md lesen.
Modulreferenz: docs/project-structure.md – vor Quellcode-Reads.
CI/CD Workflow
Pflicht vor jedem Merge nach develop:
# 1. Auf ci/staging mergen und pushen
git checkout ci/staging
git merge feature/<name>
git push
# 2. Warten bis alle Actions grün sind (.gitea/workflows/test.yml)
# 3. Erst dann nach develop mergen
Gitea Actions:
test.yml– läuft aufci/**,develop, PRs nachdevelop/mainpublish.yml– baut + pusht Container bei Push nachdevelopundmain- Registry:
tea.jr-family.de| Images:admin/gartenmanager-backend,admin/gartenmanager-frontend - develop → Tag
:dev| main → Tag:latest+ Versionsnummer
Scripts (immer diese verwenden)
bash .claude/scripts/git-commit.sh "message" # stage all + commit + push
bash .claude/scripts/git-switch.sh <branch> # branch wechseln
bash .claude/scripts/git-switch.sh <branch> from <base> # neuer branch aus base
bash .claude/scripts/git-pr.sh create <head> <base> "titel" # PR erstellen
bash .claude/scripts/git-pr.sh merge <nr> squash # PR mergen
bash .claude/scripts/git-pr.sh list # offene PRs
bash .claude/scripts/bump.sh [patch|minor] "beschreibung" # version + commit + push
bash .claude/scripts/new-feature.sh [feature|fix] <name> # branch aus develop
Architektur
backend/app/
core/config.py – Settings (DATABASE_URL, SECRET_KEY, ...)
core/security.py – JWT (Access 30min / Refresh 7d), Passwort-Hashing
core/deps.py – get_current_user, get_tenant_context, require_min_role()
db/session.py – async Engine + get_session()
models/ – SQLAlchemy ORM (UUID-PKs): User, Tenant, Plant, Bed, BedPlanting
schemas/ – Pydantic v2 Create/Update/Read je Entität
crud/ – CRUDBase + spezialisierte Klassen, nur DB-Zugriff
api/v1/ – Router: auth, plants, beds, plantings
seeds/initial_data.py – 28 Pflanzen + 15 Kompatibilitäten (idempotent)
frontend/src/
api/client.js – Axios + JWT-Interceptor + Auto-Refresh bei 401
stores/ – Pinia: auth, beds, plants
router/index.js – Auth-Guard, /login /beete /beete/:id /pflanzen
views/ – LoginView, BedsView, BedDetailView, PlantsView
components/ – AppLayout, BedForm, PlantingForm, PlantForm
Tenant-Kontext: Header X-Tenant-ID bei allen Nicht-Auth-Requests.
Rollen: READ_ONLY < READ_WRITE < TENANT_ADMIN < is_superadmin
Pflichtregeln
- Nie direkt nach
main– nur PR, nur auf Anweisung - Arbeit in
feature/,fix/oderchore/unterdevelop - Nach jeder Änderung:
bump.shausführen (MINOR bei Features, PATCH bei Fixes) - MAJOR-Version niemals selbstständig erhöhen
- Vor Merge/PR: CHANGELOG, README,
docs/project-structure.mdprüfen - In
developmergen erst wenn alle Tests grün sind
Testing
- Integrationstests testen gegen echte DB (keine DB-Mocks)
- Backend: pytest in
backend/tests/| Frontend: Vitest neben Quelldateien oder__tests__/ - Run:
docker compose exec backend pytest/cd frontend && npm run test
Build
docker compose -f docker-compose.dev.yml up # Dev (hot-reload)
docker compose up -d # Prod
docker compose exec backend alembic upgrade head
docker compose exec backend python -m app.seeds.initial_data
cd frontend && npm run dev