Files
AfiS-Aktensystem/README.md
T
Harlekin 6c32ba1a6a Tests schreiben nicht mehr in die Entwicklungsdatenbank
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.
2026-09-01 21:11:40 +02:00

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 |