Files
ApiCore/ApiCore-Backend
Nick SzaunigandClaude Opus 5.5 1a57de8573 feat: Beute L3–L5 (3D-Szene, Umbauen, Durchsicht, offline) und Diktat (T7 L1)
Beute L3 Runden 2+3 und Review-Fixes:
- Glas-Holo ohne warmes Leuchten, Wanderboden-Fuss, Fokusflug mit
  Geist-Ansicht, Inhalte im Fokus, Rähmchen mit Art-Farbe beim Anheben
- Hinweis-Geometrie je Zarge nur einmal je Layout gebaut; Drehen mit
  Pointer-Capture, endet auch bei Loslassen ausserhalb (rig-pointer.ts)
- Tiefenunschärfe ab 55 fps, Leistungsprobe bei jeder Bewegungsstufe,
  Context-Loss-Listener aufgeräumt, Trefferboxen als skalierte Einheitsbox

Beute L4 Umbauen (/colonies/[id]/hive): Entwurf mit Basis-Schnappschuss
beim ersten Schritt, Rückgängig/Wiederholen, Hinweis bei Serverstand-
Änderung, Konfliktblatt.

Beute L5:
- Durchsicht-Abschnitt „Beute“: Aufbau-Änderungen in der Durchsicht,
  Blatt-Formulare stoppen das Submit-Bubbling durch Portale (sonst
  speicherte „Speichern“ im Blatt die ganze Durchsicht), Fokus nach
  Rückgängig, Folgevorschläge beim Speichern
- Offline: Beute im Offline-Paket, Warteschlange pending-hive-changes
  (DB v5), Abarbeiten in Reihenfolge, keine Online-Änderung überholt
  wartende, Hinweis bei abgelehnter Änderung mit „Warteschlange öffnen“

T7 L1 Diktat: Spracherkennungs-Kapsel (Web Speech API), Einwilligung
standardmässig aus, Diktat-Knopf an Freitextfeldern, Seite
„Sprache & Datenschutz“; axe-core als exakte devDependency.

Backend: NotificationsService liest Empfänger und schreibt in einer
Transaktion mit FOR KEY SHARE (paralleles Löschen eines Benutzers
führte zu P2003 und verzögerten Vorschlägen; Ursache der wackeligen
Endtests). Zwei e2e-Prüfungen gegen geteilten DB-Zustand entschärft.

Gates: Frontend lint, typecheck, 2740 Tests, build; Backend lint,
typecheck, 4266 Unit-Tests, build; parallele e2e 3x grün (978).
Browser-Prüfung 1280/390 px, Tastatur, offline, reduced motion.

Refs #19 #20 #21 #22 #27 #32

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-16 09:12:04 +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).