7.5 KiB
7.5 KiB
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_blankundlearning_premiumschließ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
# 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
- DB-Schema: Migrationen schreiben für alle Tabellen
- API-Skelett: Auth + Tenant-CRUD + Module-CRUD
- Frontend-Skelett: Vue 3 + Vite + Router + Pinia
- Login-Seite: Plattform-Admin Login
- Admin-Dashboard: Tenants auflisten, anlegen, Module zuweisen