Upload (Audio nur per Magic Bytes, versiegelt, 2 MiB), Text-Weg, Liste, Abruf, Wiederholen, Verwerfen, alle verwerfen, Konfiguration und Zähler unter /voice-captures. Rechte voice-captures:use plus inspections:create (eigener Guard, API-Schlüssel ausgeschlossen), Zähler nur mit system:manage; jede Abfrage auf den Besitzer begrenzt. Grenzen je Benutzer unter Advisory-Lock (10 offen, 30 je Tag, 10 je 60 s), Wiederholen ebenfalls begrenzt und gedrosselt, Audio für QUEUED nur unter 24 h. Verwerfen löscht Inhalt und Claim sofort. Keine Inhalte in Log oder Audit. Wächter gegen Sprachinhalte in Suche, Export und Berichten erweitert. Refs #27 Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
ApiCore-Backend
NestJS-API von ApiCore (TypeScript, Prisma, PostgreSQL). Alle fachlichen Funktionen liegen unter /api/v1/.... Überblick über das ganze Projekt: ../README.md, Architektur: ../ARCHITECTURE.md.
Einrichten
npm install
cp .env.example .env # DATABASE_URL, JWT- und Verschlüsselungs-Schlüssel setzen
npx prisma migrate dev # Schema anwenden (nur lokal; gegen Produktion nur migrate deploy)
npm run start:dev # http://localhost:3001
Alle Variablen mit Bedeutung stehen in .env.example. Swagger unter /api/v1/docs ist nur mit ENABLE_SWAGGER=true erreichbar.
Laufrollen
Ein Build, drei Einstiegspunkte (ARCHITECTURE.md Abschnitt 10):
| Befehl | Rolle | Zweck |
|---|---|---|
npm run start:dev / node dist/main.js |
api (lokal ohne APICORE_ROLE: all) |
HTTP-API; mit all laufen API und Worker in einem Prozess, nur für Entwicklung und Tests |
npm run worker (node dist/worker.js) |
worker |
Zustellung der Outbox DomainEvent, Webhooks, Kalender-Sync, Wetter, Telegram; Health auf Port 3002 |
npm run job -- <name> (node dist/cli.js <name>) |
job |
cleanup, daily-evaluation, task-templates, app-backup, rekey (auch rekey --dry-run); im Cluster als CronJobs |
In Produktion ist APICORE_ROLE Pflicht und all verboten. Migrationen laufen im Cluster als initContainer migrate (prisma migrate deploy), der Seed als initContainer seed (node dist/seed.js).
Prüfen
npm run lint # eslint mit --fix
npm run typecheck # tsc --noEmit
npm test # Jest-Unit-Tests
npm run test:e2e # Jest-e2e gegen die Datenbank aus .env.test (vorher migrieren)
npm run build # dist/main.js, dist/worker.js, dist/cli.js, dist/seed.js
Die e2e-Suites laufen parallel (maxWorkers: 4 in test/jest-e2e.json) und scheitern dabei derzeit sporadisch; mit npm run test:e2e -- --runInBand sind sie grün (Issue #32). Der Image-Build (Dockerfile) führt Lint, Typecheck und Unit-Tests aus und bricht bei Fehlern ab; die e2e-Tests laufen dort nicht.
Aufbau
src/<modul>/: ein NestJS-Modul je Fachbereich (z. B.colonies,inspections,treatments,honey-batches,compliance,hive), dazu Querschnitt incommon,prisma,domain-events,worker,jobs,runtime.prisma/schema.prismaundprisma/migrations/sind die einzige Quelle des Schemas;prisma db pushwird nirgends verwendet.test/: e2e-Specs und gemeinsame Fixtures (u. a.test/fixtures/hive-ops/, die auch das Frontend nutzt).