Files
drivetimeplaner/docs/fahrschuldesk/PLAN.md
2026-05-18 22:49:36 +02:00

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_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

# 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