52 lines
4.6 KiB
Markdown
52 lines
4.6 KiB
Markdown
# 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 })`.
|