Files
ApiCore/ApiCore-Backend
Nick.RosenloecherandClaude Opus 5.5 1688e77a89
Backend E2E / e2e (push) Successful in 6m11s
Backend Image / build-and-push (push) Successful in 5m17s
Frontend Image / build-and-push (push) Successful in 15m8s
fix(queens): verlorene, eingegangene, ersetzte und verkaufte Königinnen ins Archiv
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]>
2026-10-19 16:48:25 +02:00
..

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 in common, prisma, domain-events, worker, jobs, runtime.
  • prisma/schema.prisma und prisma/migrations/ sind die einzige Quelle des Schemas; prisma db push wird nirgends verwendet.
  • test/: e2e-Specs und gemeinsame Fixtures (u. a. test/fixtures/hive-ops/, die auch das Frontend nutzt).