Die Testläufe hatten dort 70 erfundene Rollen, 112 Nutzer und 40 Akten hinterlassen. Die Rollenverwaltung zeigte deshalb "Gast" siebzehnmal, echte Rollen doppelt und in willkürlicher Reihenfolge. Aufräumen allein reicht nicht: CaseEntry, CaseEntryVersion und AuditLog lassen sich nach harter Regel 2 nicht löschen. Was ein Test dort anlegt, bleibt für immer stehen — in Phase 2 hätte das die Fallliste unbrauchbar gemacht. Tests laufen deshalb gegen <datenbank>_test auf demselben Server. pnpm test legt sie an, migriert und seedet sie vorher. Über TEST_DATABASE_URL lässt sich ein anderes Ziel setzen. Dazu die Abschnitte der Rollenverwaltung in der Reihenfolge, in der die Abteilung ihre Rollen aufzählt: Ränge, Zugehörigkeit, Zugang. Innerhalb eines Abschnitts entscheidet die Position auf dem Discord-Server, oben die höchste. Damit steht die Hierarchie an einer Stelle, die ohnehin gepflegt wird.
79 lines
2.5 KiB
Markdown
79 lines
2.5 KiB
Markdown
# AfiS-Aktensystem
|
|
|
|
Fallakten-, Personalakten- und Ermittlungsverwaltung für die Abteilung für innere Sicherheit
|
|
eines SCP-RP-Servers. Anmeldung und Berechtigungen laufen vollständig über Discord.
|
|
|
|
## Los geht's
|
|
|
|
1. Ordner in ein leeres Git-Repository legen
|
|
2. Discord-Application anlegen, Bot einladen, **Server Members Intent aktivieren**
|
|
3. Claude Code im Projektordner starten
|
|
|
|
Gehostet wird als **ein Dockge-Stack** auf dem Homeserver. Die fertige `compose.yaml` und die
|
|
Einrichtungsschritte stehen in `docs/11-betrieb.md`. Die `.env` wird nicht im Repository
|
|
gepflegt, sondern im `.env`-Reiter von Dockge; `.env.example` ist nur die Vorlage.
|
|
|
|
Claude Code liest `CLAUDE.md` von selbst. Die Fachdokumente liegen in `docs/`, der Bauplan
|
|
in `TASKS.md`.
|
|
|
|
## Erste Anweisung an Claude Code
|
|
|
|
> Lies CLAUDE.md und alle Dateien in docs/. Fass in fünf Sätzen zusammen, was gebaut wird,
|
|
> und nenn mir alles, was in den Dokumenten widersprüchlich oder unklar ist, bevor du
|
|
> anfängst. Baue noch nichts.
|
|
|
|
Danach Phase für Phase aus `TASKS.md`. Siehe `docs/12-arbeiten-mit-claude-code.md`.
|
|
|
|
## Aufbau
|
|
|
|
```
|
|
CLAUDE.md Projektanweisung, wird automatisch gelesen
|
|
TASKS.md Bauplan in neun Phasen
|
|
docs/ Fachdokumente, dazu 13-entscheidungen.md
|
|
compose.yaml Der Dockge-Stack
|
|
.env.example Vorlage für den .env-Reiter in Dockge
|
|
|
|
web/ Next.js 15, App Router
|
|
worker/ discord.js, Rollen-Abgleich
|
|
pdf/ Playwright, PDF-Erzeugung
|
|
packages/db/ Prisma-Schema, Migrationen, Seed
|
|
docker/ Dockerfiles für web, worker und pdf
|
|
```
|
|
|
|
## Lokal entwickeln
|
|
|
|
Node 22 und pnpm 9.
|
|
|
|
```bash
|
|
corepack enable && pnpm install
|
|
|
|
docker run -d --name afis-db -e POSTGRES_DB=afis -e POSTGRES_USER=afis \
|
|
-e POSTGRES_PASSWORD=afis -p 5434:5432 postgres:16-alpine
|
|
|
|
cp .env.example .env
|
|
# DATABASE_URL und DIRECT_DATABASE_URL auf localhost:5434 zeigen lassen
|
|
|
|
pnpm --filter @afis/db run build # erzeugt den Prisma-Client
|
|
pnpm db:deploy && pnpm db:seed
|
|
pnpm dev
|
|
```
|
|
|
|
Prüfen wie die CI:
|
|
|
|
```bash
|
|
pnpm lint && pnpm typecheck && pnpm test
|
|
pnpm test:e2e
|
|
```
|
|
|
|
`pnpm test` legt sich eine eigene Datenbank `afis_test` an und lässt die
|
|
Entwicklungsdatenbank in Ruhe. Grund in `docs/13-entscheidungen.md`.
|
|
|
|
## Betrieb kurz gefasst
|
|
|
|
| | |
|
|
|---|---|
|
|
| Verwaltung | Dockge, ein Stack namens `afis` unter `/opt/stacks/afis/` |
|
|
| Erreichbarkeit | Cloudflare Tunnel, kein offener Port am Router |
|
|
| Aktualisieren | Dockge → Stack → Update, Migration läuft automatisch mit |
|
|
| Backup | zwei Dauerläufer mit Cron: nächtlicher Dump plus restic offsite |
|