feat(backend): Automatisierungen mit drei fest hinterlegten Triggern (Modul 30)
Neues AutomationModule mit AutomationRule-Modell (ein Row je Trigger-Typ, per Unique Constraint erzwungen). Drei fest im Code hinterlegte Trigger, die Admins nur aktivieren/deaktivieren bzw. deren Konfiguration/Aufgaben- text anpassen können: - QUEENLESS_NO_EGGS: Königin nicht gesehen UND keine Stifte vorhanden (bei Durchsicht) → Kontrollaufgabe - VARROA_THRESHOLD: Varroa-Schwellenwert überschritten (konfigurierbar, Standard 10 Milben/Tag) → Behandlungsprüfung - FEED_STATUS_CRITICAL: Futterstatus "kritisch" (bei Durchsicht) → Fütterungsaufgabe Jeder ausgelöste Trigger erzeugt eine Task UND eine Notification sowie einen Audit-Log-Eintrag; Tasks lösen zusätzlich das bestehende task.created-Webhook aus. InspectionsService und VarroaService rufen die Auswertung direkt nach dem jeweiligen Erstellen auf. Neue Endpunkte (nur Administrator): GET/PATCH /automation-rules. Unit-Tests für AutomationService (alle drei Trigger, Deaktivierung, Update mit Audit-Log) sowie E2E-Tests (Rollen-Check, alle drei Trigger end-to-end über echte Inspection-/Varroa-Endpunkte, Deaktivierung verhindert weitere Trigger). E2E-Suite zweimal hintereinander grün verifiziert (Idempotenz der globalen Regel-Zeilen sichergestellt). Migration auf Dev- und Test-Datenbank angewendet.
This commit is contained in:
1 parent
42a2be31b4
commit
3f47a6ae8d
15 files changed
+733
No files matched your search
@@ -0,0 +1,18 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "AutomationTriggerType" AS ENUM ('QUEENLESS_NO_EGGS', 'VARROA_THRESHOLD', 'FEED_STATUS_CRITICAL');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "AutomationRule" (
|
||||
"id" TEXT NOT NULL,
|
||||
"triggerType" "AutomationTriggerType" NOT NULL,
|
||||
"active" BOOLEAN NOT NULL DEFAULT true,
|
||||
"config" JSONB,
|
||||
"actionTemplate" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "AutomationRule_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "AutomationRule_triggerType_key" ON "AutomationRule"("triggerType");
|
||||
@@ -823,3 +823,26 @@ model Document {
|
||||
|
||||
@@index([entityType, entityId])
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Automatisierungen (Abschnitt 26) – v1.x Modul 30
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Fest hinterlegte Trigger (Code, nicht nutzerdefiniert) – die Tabelle erlaubt
|
||||
// nur, jeden Trigger zu aktivieren/deaktivieren und seine Schwellenwerte
|
||||
// (config) sowie den Aufgabentext (actionTemplate) anzupassen.
|
||||
enum AutomationTriggerType {
|
||||
QUEENLESS_NO_EGGS
|
||||
VARROA_THRESHOLD
|
||||
FEED_STATUS_CRITICAL
|
||||
}
|
||||
|
||||
model AutomationRule {
|
||||
id String @id @default(cuid())
|
||||
triggerType AutomationTriggerType @unique
|
||||
active Boolean @default(true)
|
||||
config Json?
|
||||
actionTemplate String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
Reference in new issue
Block a user