Entscheidung Inhaber: Zieht eine neue Königin ein, wird die bisherige „Ersetzt“; Vereinigen und Auflösen eines Volks setzen dessen Königin auf „Ersetzt“, ein Winterverlust auf „Eingegangen“. Nur aus einem verfügbaren Status (ACTIVE, RESERVE, MATED, UNMATED), über updateStatusIn in derselben Transaktion mit Archivdatum und Audit (QueensService.retireIn). Ein von Hand gesetzter Endstatus eines Volks fragt weiter über den Aufräum- Vorschlag nach. 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).