From 6ca0df453807ed4461cc0c28bbae58d34dc03e7d Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Mon, 18 May 2026 22:49:36 +0200 Subject: [PATCH] Docs: fahrschuldesk Projektplan angelegt --- docs/fahrschuldesk/PLAN.md | 329 +++++++++++++++++++++++++++++++++++++ 1 file changed, 329 insertions(+) create mode 100644 docs/fahrschuldesk/PLAN.md diff --git a/docs/fahrschuldesk/PLAN.md b/docs/fahrschuldesk/PLAN.md new file mode 100644 index 0000000..fa98fcb --- /dev/null +++ b/docs/fahrschuldesk/PLAN.md @@ -0,0 +1,329 @@ +# fahrschuldesk — Projektplan + +## 1. Überblick + +**fahrschuldesk** ist eine SaaS-Plattform zur Verwaltung von Fahrschulen. Plattformbetreiber (Admin-Team) können Fahrschulen als Mandanten anlegen und verwalten. Jede Fahrschule erhält eine modulare Oberfläche mit Kundenverwaltung, Kalender, Messenger und optionaler Lernsoftware. + +**Status:** Planungsphase (Initialsetup) + +--- + +## 2. Architektur + +### 2.1 Domains + +| Domain | Zweck | Pfad | +|---|---|---| +| `fahrschuldesk.de` | WebUI (Frontend) | `www/fahrschuldesk.de/public/` | +| `api.fahrschuldesk.de` | REST API (Backend) | `www/api.fahrschuldesk.de/public/` | + +### 2.2 Tech-Stack + +- **Frontend:** Vue 3 + Vite (SPA) +- **Backend:** PHP (Laravel oder Slim Framework) +- **Datenbank:** PostgreSQL (fahrschuldesk DB, Host: 10.255.30.11:5433) +- **Auth:** JWT-basiert +- **Deploy:** Git → Server via rsync + +--- + +## 3. Hierarchie & Datenmodell + +``` +Plattform-Admins (intern) + └── Fahrschule (Mandant) + └── Filialen + └── Benutzer +``` + +### 3.1 Tabellen + +#### Plattform-Admins (interne Verwaltung) +``` +platform_admins + - id + - email (unique) + - password_hash + - name + - role (super_admin | support | sales) + - created_at + - updated_at + - last_login_at +``` + +#### Fahrschulen (Mandanten) +``` +tenants + - id + - name + - slug (unique, für Subdomain?) + - email (Rechnungs-Kontakt) + - phone + - address + - status (active | suspended | trial) + - trial_ends_at + - created_at + - updated_at +``` + +#### Filialen +``` +branches + - id + - tenant_id (FK) + - name + - address + - phone + - email + - opening_hours (JSON) + - created_at + - updated_at +``` + +#### Benutzer +``` +users + - id + - tenant_id (FK) + - branch_id (FK, nullable) + - email (unique pro Tenant) + - password_hash + - first_name + - last_name + - user_type (office | instructor | lecturer | student | admin) + - status (active | inactive) + - created_at + - updated_at + - last_login_at +``` + +#### Module (pro Fahrschule zuweisbar) +``` +modules + - id + - key (office | calendar | messenger | learning_blank | learning_premium) + - name + - description + - monthly_price + - is_active (Plattform-global) + +tenant_modules + - id + - tenant_id (FK) + - module_id (FK) + - status (enabled | disabled) + - enabled_at + - expires_at (nullable) +``` + +#### Lerninhalte (Premium-Modul) +``` +learning_contents + - id + - tenant_id (FK, nullable — null = Plattform-global) + - category + - title + - description + - content_type (video | document | quiz | exercise) + - content_url + - thumbnail_url + - is_premium (nur mit Premium-Modul) + - created_at + - updated_at +``` + +#### Fahrschüler-Fortschritt +``` +student_progress + - id + - user_id (FK, student) + - content_id (FK) + - status (not_started | in_progress | completed) + - completed_at + - notes (Lehrer-Kommentare) + - created_at + - updated_at +``` + +--- + +## 4. API-Struktur + +### 4.1 Auth +``` +POST /api/auth/login (Admin/Login) +POST /api/auth/logout +GET /api/auth/me +``` + +### 4.2 Plattform-Admin (nur Admins) +``` +GET /api/admin/tenants +POST /api/admin/tenants +GET /api/admin/tenants/:id +PUT /api/admin/tenants/:id +DELETE /api/admin/tenants/:id + +GET /api/admin/tenants/:id/modules +POST /api/admin/tenants/:id/modules +DELETE /api/admin/tenants/:id/modules/:moduleId + +GET /api/admin/platform-modules +GET /api/admin/platform-modules/:id +``` + +### 4.3 Tenant-Admin (Fahrschule) +``` +GET /api/branches +POST /api/branches +PUT /api/branches/:id +DELETE /api/branches/:id + +GET /api/users +POST /api/users +GET /api/users/:id +PUT /api/users/:id +DELETE /api/users/:id + +GET /api/my-modules +``` + +### 4.4 Users (allgemein pro Tenant) +``` +GET /api/calendar/events +POST /api/calendar/events +PUT /api/calendar/events/:id +DELETE /api/calendar/events/:id + +GET /api/messages +POST /api/messages +GET /api/messages/conversations +``` + +### 4.5 Lernsoftware +``` +GET /api/learning/contents +GET /api/learning/contents/:id +GET /api/learning/my-progress +POST /api/learning/my-progress +PUT /api/learning/my-progress/:contentId +``` + +--- + +## 5. Rollen & Rechte + +### Plattform-Admins (intern) +| Rolle | Rechte | +|---|---| +| super_admin | Alles: Tenants, Admins, Module, Settings | +| support | Tenants einsehen/verwalten, keine Admins | +| sales | Tenants anlegen, keine Settings | + +### Fahrschul-Benutzer +| Typ | Beschreibung | +|---|---| +| admin | Voller Zugriff auf eigene Fahrschule | +| office | Büromitarbeiter: Kunden, Kalender, Berichte | +| instructor | Fahrlehrer: Kalender, eigene Fahrschüler | +| lecturer | Dozent: Kalender, eigene Unterrichtseinheiten | +| student | Fahrschüler: Lernsoftware, eigener Fortschritt | + +--- + +## 6. Modul-System + +### 6.1 Verfügbare Module + +| Key | Name | Beschreibung | +|---|---|---| +| `office` | Office | Kundenverwaltung, Fahrzeugverwaltung, Berichte | +| `calendar` | Kalender | Terminplanung, Unterrichtszeiten | +| `messenger` | Messenger | Interne Kommunikation | +| `learning_blank` | Lernsoftware (Blanko) | Eigene Inhalte erstellen, keine Premium-Inhalte | +| `learning_premium` | Lernsoftware (Premium) | Inkl. vorgefertigter Lerninhalte | + +### 6.2 Modul-Zuordnung + +- Jede Fahrschule kann Module einzeln aktivieren/deaktivieren +- Preise werden pro Modul hinterlegt (für Abrechnung) +- Das Modul `learning_blank` und `learning_premium` schließen sich gegenseitig aus + +--- + +## 7. Frontend-Struktur (fahrschuldesk.de) + +``` +src/ +├── views/ +│ ├── auth/ +│ │ ├── Login.vue +│ │ └── Logout.vue +│ ├── admin/ (Plattform-Admin-Bereich) +│ │ ├── Dashboard.vue +│ │ ├── Tenants.vue +│ │ ├── TenantEdit.vue +│ │ └── Modules.vue +│ ├── tenant/ (Fahrschule-Bereich) +│ │ ├── Dashboard.vue +│ │ ├── Users.vue +│ │ ├── Branches.vue +│ │ ├── Office.vue +│ │ ├── Calendar.vue +│ │ ├── Messenger.vue +│ │ └── Learning.vue +│ └── student/ (Fahrschüler-Bereich) +│ ├── Dashboard.vue +│ └── Learning.vue +├── components/ +├── stores/ (Pinia) +├── router/ +└── api/ (API-Client) +``` + +--- + +## 8. Deployment-Workflow + +``` +Lokal (~/drivetimeplaner/www/fahrschuldesk.de/) + └── git commit + push + ↓ +Git (https://git.shadow-land.de/madgerm/drivetimeplaner) + ↓ git push (oder rsync via CI/CD) +Server (/srv/web/fahrschuldesk/domains/fahrschuldesk.de/public/) +``` + +### Sync-Befehle +```bash +# Server → Lokal (Daten holen) +rsync -az --exclude='storage/sessions/' --exclude='storage/database/' \ + -e "ssh -p 2225" fahrschuldesk@fahrschuldesk.de:/srv/web/fahrschuldesk/domains/ www/ + +# Lokal → Server (deployen) +rsync -az --exclude='storage/sessions/' --exclude='storage/database/' \ + -e "ssh -p 2225" www/fahrschuldesk.de/public/ \ + fahrschuldesk@fahrschuldesk.de:/srv/web/fahrschuldesk/domains/fahrschuldesk.de/public/ +``` + +--- + +## 9. Offene Fragen / Next Steps + +- [ ] Tech-Stack final abstimmen (Laravel vs. Slim vs. anderes?) +- [ ] Auth-Flow: Login-Seite designen +- [ ] Erste Migration: Plattform-Admins + Tenants + Users +- [ ] Mockups/UI-Design für Dashboard +- [ ] Premium-Lerninhalte: woher kommen? Eigene Erstellung oder Drittanbieter? + +--- + +## 10. Phase 1 — Erste Schritte + +### Ziel: Grundgerüst stehen + +1. **DB-Schema:** Migrationen schreiben für alle Tabellen +2. **API-Skelett:** Auth + Tenant-CRUD + Module-CRUD +3. **Frontend-Skelett:** Vue 3 + Vite + Router + Pinia +4. **Login-Seite:** Plattform-Admin Login +5. **Admin-Dashboard:** Tenants auflisten, anlegen, Module zuweisen