7f7da15965
Completed: - Phase 0: Project Setup (T001-T003) - Docker Compose, FastAPI skeleton, React SPA - Phase 1: Auth System (T004-T008) - DB models, JWT auth, RBAC middleware, user management - Phase 2: Contacts & Tags (T009-T011) - CRUD API + UI - Phase 3: Equipment Catalog (T012-T014) - Models, API, UI with barcode/QR - Phase 4: Crew Management (T015-T017) - Models, availability, UI - Phase 5: Vehicle Fleet (T018-T020) - Models, assignments, UI - Phase 6: Projects (T021-T023) - Project hierarchy models, CRUD API, list/detail UI
10 KiB
10 KiB
Resume – Rentman Clone (abgeschlossener Stand)
Letzte Aktualisierung: 2026-05-31 13:10
Zuständiger Agent: A0 Software Orchestrator
Nächster Agent kann nahtlos fortfahren.
Projektübersicht
Ziel: Vollständiger Nachbau von Rentman.io (Cloud-basierte Vermietungs- und Event-Management-Plattform) mit ≥90 % Funktionsumfang.
Ansatz: Projektzentrisch – jedes Modul gehört zu einem Projekt.
Status: Implementierungsphase (plan_mode: implementation_allowed).
Bisheriger Fortschritt
✅ Abgeschlossene Phasen (0–2)
| Phase | Tasks | Inhalt |
|---|---|---|
| 0 – Foundation | T001–T003 | Projektstruktur, Docker Compose, FastAPI-Grundgerüst, React-Frontend mit Vite/Tailwind/Router/Zustand |
| 1 – Auth-System | T004–T008 | Account/User/Role-Modelle, JWT-Auth (Login/Register/Refresh), RBAC-Middleware, Admin-API für User & Roles, Login/Register/Admin-UI |
| 2 – Contacts & Tags | T009–T011 | Contact- und Tag-Modelle mit M2M, CRUD-API für Contacts (mit Suche, Typfilter, Tags), Tags-API, Contacts-UI (Liste, Formular, Detailseite) |
🔜 Nächste Phase (3) – Equipment Catalog
| Task | Beschreibung |
|---|---|
| T012 | Datenbankmodelle: Equipment, StockLocation, EquipmentGroup (M2M) |
| T013 | Equipment-CRUD-API mit Suche, Filter, Barcode/QR-Generierung, CSV-Import/Export |
| T014 | Equipment-UI: Liste (Grid/Table-Toggle), Detailseite, Formular, Barcode-Druck |
Offene Tasks: T012–T020 (Equipment, Crew, Vehicles), T021+ (Projektmanagement), Finanzen, Scheduling, Reporting, PWA etc. (siehe todo.md und task_graph.json).
Technologie-Stack
Backend (/backend)
- Framework: FastAPI (Python 3.12+, async)
- ORM: SQLAlchemy 2.0 (async engine mit aiosqlite für Dev)
- Migrationen: Alembic (render_as_batch für SQLite)
- Auth: JWT (python-jose) + Passwort-Hashing (passlib bcrypt)
- Config: Pydantic Settings (
.env/.env.example) - Datenbank: SQLite (
backend/data/rentman.db) für Dev, PostgreSQL 16 für Prod geplant - Task Queue: Celery + Redis (später)
- Datei-Storage: MinIO (Docker)
Frontend (/frontend)
- Framework: React 19 + TypeScript
- Build: Vite
- Styling: Tailwind CSS 4 + Radix UI Primitives
- State Management: Zustand (Auth-Store) + TanStack React Query (API-Daten)
- Routing: React Router 7
- HTTP-Client: Axios mit Interceptor (Access-Token, Auto-Refresh)
- Icons: Lucide React
Infrastruktur
- Docker Compose: Services: backend, frontend, redis, minio
- Makefile: Befehle:
dev,backend-dev,frontend-dev,migrate, etc.
Projektstruktur
rentman-clone/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI-App, Lifespan, CORS
│ │ ├── core/
│ │ │ ├── config.py # Settings
│ │ │ └── security.py # JWT + bcrypt
│ │ ├── db/
│ │ │ ├── base.py # SQLAlchemy Base
│ │ │ └── session.py # AsyncEngine + Session
│ │ ├── models/ # SQLAlchemy-Modelle
│ │ │ ├── account.py
│ │ │ ├── user.py
│ │ │ ├── role.py
│ │ │ ├── contact.py # + Tag M2M
│ │ │ └── tag.py
│ │ ├── schemas/ # Pydantic-Schemas
│ │ │ ├── auth.py
│ │ │ ├── user.py
│ │ │ ├── role.py
│ │ │ └── contact.py
│ │ ├── api/v1/
│ │ │ ├── router.py # Registriert alle Sub-Router
│ │ │ ├── health.py
│ │ │ ├── auth.py
│ │ │ ├── users.py
│ │ │ ├── roles.py
│ │ │ ├── contacts.py
│ │ │ └── tags.py
│ │ └── api/deps.py # Dependency: get_current_user, require_permission
│ ├── alembic/
│ │ ├── env.py # Async + Batch
│ │ └── versions/ # Migrationen
│ ├── data/ # SQLite-DB
│ ├── requirements.txt
│ ├── Dockerfile
│ └── .env.example
├── frontend/
│ ├── src/
│ │ ├── main.tsx # Einstieg, QueryClient, Router
│ │ ├── App.tsx # Routing
│ │ ├── components/
│ │ │ ├── AppLayout.tsx # Sidebar, Header, Navigation
│ │ │ ├── ProtectedRoute.tsx
│ │ │ └── ContactForm.tsx
│ │ ├── pages/
│ │ │ ├── Home.tsx
│ │ │ ├── Login.tsx
│ │ │ ├── Register.tsx
│ │ │ ├── Dashboard.tsx
│ │ │ ├── Users.tsx # Admin
│ │ │ ├── Roles.tsx # Admin
│ │ │ ├── Contacts.tsx
│ │ │ ├── ContactsNew.tsx
│ │ │ ├── ContactsEdit.tsx
│ │ │ └── ContactDetail.tsx
│ │ ├── services/
│ │ │ └── api.ts # Axios-Client mit Token-Interceptor
│ │ ├── stores/
│ │ │ └── authStore.ts # Zustand Auth-Store (persistiert)
│ │ └── lib/
│ │ └── utils.ts # cn()-Funktion
│ ├── package.json
│ ├── vite.config.ts
│ └── Dockerfile
├── docker-compose.yml
├── Makefile
├── README.md
└── .a0/ # Orchestrator-Artefakte
├── project_state.json
├── requirements.md
├── architecture.md
├── design.md
├── task_graph.json
├── decisions.md
├── todo.md
├── worklog.md
├── current_status.md
├── next_steps.md
├── known_errors.md
└── resume.md ← DIESE DATEI
Wichtige Code-Patterns & Konventionen
Backend
- Model → Schema → Router → Frontend: Dieses Pattern für jedes neue Modul verwenden.
- Tenant-Isolation: Alle Datenbankabfragen müssen
account_id-Filter enthalten. Der aktuelle User wird aus der JWT extrahiert (get_current_user) und liefertcurrent_user.account_id. - RBAC: Jeder Endpunkt mit
require_permission("<resource>:<action>")schützen. Vorhandene Permissions:users:read/write/delete,roles:read/write,contacts:read/write/delete,tags:read/write,equipment:*(noch zu vergeben). - UUIDs: Alle Primärschlüssel sind UUIDs (Python
uuid.uuid4()). - Migrationen: Mit
alembic revision --autogenerateerstellen,render_as_batch=Truein env.py beachten. Nach Erstellung imversions/-Ordner manuell anpassen. - API-Paginierung: Standard:
limitundoffsetals Query-Parameter, Antwort mititems-Array undtotal-Count.
Frontend
- Auth-Store:
authStoreenthälttoken,user,isAuthenticated. Bei Login/Refresh gespeichert, bei Logout gelöscht. - API-Client:
services/api.tsAxios-Instanz mitbaseURL, Access-Token-Interceptor (fügtAuthorization-Header hinzu) und 401-Auto-Refresh (ruft/auth/refreshauf). - Protected Route:
<ProtectedRoute permission="...">kapselt Zugriffsschutz. Umleitet auf/loginwenn nicht authentifiziert, zeigt Fehler wenn Permission fehlt. - React Query: Für Datenabrufe
useQuery, für MutationenuseMutationverwenden (z.B.useMutation({ mutationFn: ... })). - Tailwind: Utility-Klassen verwenden, keine eigenen CSS-Dateien. Theme-Farben im
index.cssdefiniert. - Neue Seiten: In
App.tsxRoute hinzufügen, ggf. mit ProtectedRoute. Sidebar-Links inAppLayout.tsxergänzen.
Startanweisungen
Voraussetzungen
- Docker und Docker Compose installiert
- Python 3.12+, Node.js 22+
Entwicklung starten
cd /a0/usr/workdir/dev-projects/rentman-clone
# Abhängigkeiten installieren
make install-backend # pip install -r backend/requirements.txt
make install-frontend # npm install
# Backend starten (uvicorn auf Port 8000)
make backend-dev
# Frontend starten (Vite auf Port 5173)
make frontend-dev
# Oder alles mit Docker:
docker compose up
Datenbank-Migrationen
cd backend
# Neue Migration erzeugen
alembic revision --autogenerate -m "beschreibung"
# Migration anwenden
alembic upgrade head
API testen
# Registrierung
curl -X POST http://localhost:8000/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{"account_name":"Testfirma", "full_name":"Admin", "email":"admin@test.de", "password":"test123"}'
# Login
curl -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@test.de", "password":"test123"}'
# Mit Token
curl http://localhost:8000/api/v1/auth/me \
-H "Authorization: Bearer <access_token>"
Offene Punkte & Bekannte Einschränkungen
- Keine automatischen Tests vorhanden (später hinzufügen).
- SQLite-Spezifika: Einige PostgreSQL-Features (z.B. JSON-Felder in SQLite als Text) müssen bei Migration beachtet werden.
- Image-Upload: Noch nicht implementiert (Equipment-Bilder, Logos).
- Frontend-Seiten für Equipment, Crew, Vehicles, Projects, Finanzen etc. fehlen noch.
- Auth-Flows wie Passwort-Reset und E-Mail-Verifikation fehlen.
- Internationalisierung (i18n) nicht begonnen (DE+EN geplant).
Nächste Aktion für neuen Agenten
- .a0/resume.md (diese Datei) lesen, dann .a0/project_state.json, .a0/task_graph.json, .a0/next_steps.md und .a0/requirements.md.
- Plan Mode prüfen: ist
implementation_allowed. - Phase 3 starten mit Task T012: Equipment-Datenbankmodelle (models/equipment.py, StockLocation, EquipmentGroup), wie in
design.mdundarchitecture.mdbeschrieben. - Anschließend T013 (API) und T014 (UI).
- Bei Problemen
known_errors.mdprüfen und ggf. erweitern. - Alle Änderungen in
.a0/-Dateien dokumentieren (worklog, todo, current_status, next_steps).
Viel Erfolg! 🚀