Upload → fetch (Arbeitsordner) → Ersatz-Whisper → ingest → Auswertung mit FakeStructuredModel → genau eine Meldung → Übernahme in die Durchsicht (Inhalt gelöscht); fremder Nutzer 404, READONLY/API_CLIENT 403; parallele Claims je Aufnahme genau einmal; Text-Weg; der Log-Mitschnitt enthält nie das Gesagte. 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).