Die Königinnen-Liste trennt Aktiv und Historie über deactivatedAt, das Backend setzte das Feld aber nie. Jetzt stempelt ein Statuswechsel auf LOST, DECEASED, REPLACED oder SOLD das Datum (update und updateStatusIn), ein korrigierter Status nimmt es wieder weg. Die Migration 20261021100000_queen_deactivated_backfill trägt das Datum für bestehende Königinnen nach (Ende der letzten Volkszuordnung, sonst updatedAt). Auch die Lebensdauer in der Statistik rechnet damit wieder. 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).