first commit

This commit is contained in:
2026-07-16 09:35:32 +02:00
commit dd0746e2e6
179 changed files with 25679 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
# d4rk_tablet — Behörden-MDT / CAD
Eigenständige Behörden-Software (MDT/CAD) für FiveM. Läuft **unabhängig vom Game-Server**:
im Spiel (NUI-iframe) *und* im Browser (Leitstelle, 2. Monitor, echtes Tablet).
> Das komplette System lebt im Backend/Web. Bürger & Fahrzeuge werden **MDT-eigen**
> geführt (nicht aus QBox gelesen) — so lassen sich auch illegale Einreise, unbekannte
> Täter (John Doe) und gefälschte Kennzeichen sauber abbilden.
## Architektur
```
apps/tablet-web React 18 + Vite 5 + Tailwind 4 + Zustand + TanStack Query + Lucide
backend/api Fastify + Drizzle ORM (mysql2) + Socket.io → liest QBox-MariaDB direkt
fivem-bridge minimale Lua-Resource (Token, NUI, Positionen, Waypoint)
packages/shared TS-DTOs (zod) + Socket-Events + RBAC — von web & backend genutzt
```
## Setup
```bash
pnpm install # Node >=20, pnpm 10
cp .env.example .env # DB-Creds, JWT-, HMAC-, Discord-Secrets eintragen
pnpm dev # startet web (5173) + api (3000) via Turborepo
```
Weitere Scripts: `pnpm typecheck`, `pnpm build`, `pnpm db:generate`, `pnpm db:migrate`.
## Datenbank
- **Komplett eigenständig:** alle Daten in eigenen `mdt_*`-Tabellen (Migrations via Drizzle Kit).
- Bürger (`mdt_citizens`) und Fahrzeuge (`mdt_vehicles`) werden von der Behörde selbst geführt
— QBox-Tabellen werden **nicht** mehr gelesen (bewusste Entscheidung für Hardcore-RP).
## Milestones
1.**Scaffold** — Monorepo, shared DTOs, Fastify + Vite Skelett, Drizzle-Setup
2.**Auth** — JWT + RBAC-Guards, `/auth/fivem` (HMAC), Discord OAuth, Dev-Login
3.**Personen + Fahrzeuge** — QBox-Reads (JSON-Parsing), REST + RBAC, TanStack-Query-UI. Siehe [docs/dev-setup.md](docs/dev-setup.md) für Seed + Live-Test
4.**Strafakten / Haftbefehle** — Strafenkatalog, Akte anlegen (Charges × Anzahl → Summe Bußgeld/Haft), Haftbefehl ausstellen/aufheben. Behörden-Branding + Tablet-Statusbar.
5.**Realtime-Dispatch + Map** — Socket.io (JWT-Auth, Dept-Rooms), Einsätze live, Officer-Positionen live. **MapLibre GTA-Satelliten-Map** (Tiles served vom Backend `/tiles/`, Game→lng/lat-Projektion). HMAC-Bridge-Endpoints (`/bridge/*`).
6.**Rechte & Mitarbeiter** — Hybrid-Rechte (granulare Nodes, QBox-Rang-Matrix Overrides, ins JWT gebacken). **Visueller Rechte-Explorer** (Baum MDT/CAD/Admin, Tri-State, Suche, Rollen-Templates) + Mitarbeiter-Verwaltung. Guards prüfen `permissions`.
7.**FiveM-Bridge** — Lua-Resource (`fivem-bridge/`): Tablet öffnen (NUI-iframe + Token via postMessage), Server-Token-Flow (Shared-Secret), server-seitiger Positions-Push, Dienst-Sync, Dispatch-Export, Waypoint. Siehe [docs/fivem-bridge.md](docs/fivem-bridge.md). Backend-Contract verifiziert; Lua-Ingame-Test beim Betreiber.
8. 🚧 Weitere Module (aus EMS-MDT-Vorlage): ✅ **Start-Dashboard** (Uhr, Termine, **Schwarzes Brett**) · ✅ **Dokumente** (Ordner + **Tiptap Rich-Text** [Tabellen/Aufgabenlisten/Link/Bild/…], Aktenzeichen `DO-JJJJ-MM-TT-###`) · ✅ **Bürgerakten** (MDT-eigene, voll editierbare Bürger-Registry: anlegen/bearbeiten/löschen, Mugshot-URL, Aufenthaltsstatus inkl. illegaler Einreise, Aliasse, Personenbeschreibung, Lizenzen, Fahndung) · ✅ **Fahrzeug-Registry** (MDT-eigen: anlegen/bearbeiten/löschen, Halter-Verknüpfung, Kennzeichen-Status registriert/**gefälscht**/gestohlen) · ✅ **EMS-Behandlungsakten** (Pendant zu Strafakten: Patient-Suche, Aktenzeichen `TR-JJJJ-MM-TT-###`, Diagnose + Behandlung als **Tiptap Rich-Text**, offen/abgeschlossen) · ✅ **Gesetze** (Strafgesetzbuch-Nachschlagewerk: nach Kategorie gruppiert, durchsuchbar, Gesetzestext als **Tiptap Rich-Text** + Bußgeld/Haftzeit, pflegbar mit `mdt.laws.manage`) · ✅ **Kalender** (echte Monatsansicht, Termine/Events mit Kategorie-Farben, Einladung einzelner/mehrerer Personen, **Selbst-Eintragung + RSVP** [Zusage/Absage/Vielleicht], Tiptap-Beschreibung) · ⬜ Mein Profil · ⬜ Dispatch-Units
9.**Freigabe-System (ACL)** — konfigurierbare **Behörden-Registry** + **Gruppen/Teams** + modernes **Freigabe-Panel** (Lesen/Schreiben × Behörden/Gruppen/Personen, öffentlich-Toggle) auf Dokumenten/Ordnern **und Bürgerakten** (dort als Sichtbarkeits-ACL: welche Behörde sieht welche Akte). Verwaltung: Rechte-Matrix · Mitarbeiter · Behörden · Gruppen.
10. ⬜ Feature-Flags · Dienststatus-Gating · Ownership · Temporär/Vertretung · Audit-Log · Deployment
## Dev-Hinweise
- **Browser-Dev ohne Login:** `VITE_DEV_AUTH_BYPASS=true` in `.env` → Mock-Officer (police, admin).
- Auth-Token kommt im NUI per `postMessage({ action: 'auth', token, user })`.