Enable flow-aware decision routing

This commit is contained in:
Remi
2025-09-21 21:16:33 +02:00
parent d3058314ec
commit 10cae457f9
16 changed files with 1622 additions and 998 deletions

View File

@@ -6,9 +6,16 @@ import {
sanitizeLayout,
sanitizeLLMTemplate,
sanitizeMetadata,
sanitizeNodeCondition,
sanitizeNodeTrigger,
sanitizeTransition,
} from '../../../../utils/decisionSanitizer'
import { serializeNodeDocument } from '../../../../services/decisionFlowService'
import type {
DecisionNodeCondition,
DecisionNodeTrigger,
DecisionNodeTransition,
} from '~~/shared/types/decision'
const ROLE_SET = new Set(['pilot', 'atc', 'system'])
@@ -47,9 +54,44 @@ export default defineEventHandler(async (event) => {
throw createError({ statusCode: 400, statusMessage: 'phase is required' })
}
const transitions = Array.isArray(body.transitions)
? body.transitions.map((transition: any, index: number) => sanitizeTransition(transition, index))
: []
let transitions: DecisionNodeTransition[] = []
try {
transitions = Array.isArray(body.transitions)
? body.transitions.map((transition: any, index: number) => sanitizeTransition(transition, index))
: []
} catch (error: any) {
throw createError({
statusCode: 400,
statusMessage: error?.message || 'Transition ungültig',
data: { formError: error?.message || 'Transition ungültig', field: 'transitions' },
})
}
let triggers: DecisionNodeTrigger[] = []
try {
triggers = Array.isArray(body.triggers)
? body.triggers.map((trigger: any, index: number) => sanitizeNodeTrigger(trigger, index))
: []
} catch (error: any) {
throw createError({
statusCode: 400,
statusMessage: error?.message || 'Trigger ungültig',
data: { formError: error?.message || 'Trigger ungültig', field: 'triggers' },
})
}
let conditions: DecisionNodeCondition[] = []
try {
conditions = Array.isArray(body.conditions)
? body.conditions.map((condition: any, index: number) => sanitizeNodeCondition(condition, index))
: []
} catch (error: any) {
throw createError({
statusCode: 400,
statusMessage: error?.message || 'Bedingung ungültig',
data: { formError: error?.message || 'Bedingung ungültig', field: 'conditions' },
})
}
const layout = sanitizeLayout(body.layout) || { x: 0, y: 0 }
const metadata = sanitizeMetadata(body.metadata)
@@ -89,6 +131,8 @@ export default defineEventHandler(async (event) => {
frequency: typeof body.frequency === 'string' ? body.frequency.trim() || undefined : undefined,
frequencyName:
typeof body.frequencyName === 'string' ? body.frequencyName.trim() || undefined : undefined,
triggers,
conditions,
transitions,
layout,
metadata,

View File

@@ -6,9 +6,16 @@ import {
sanitizeLayout,
sanitizeLLMTemplate,
sanitizeMetadata,
sanitizeNodeCondition,
sanitizeNodeTrigger,
sanitizeTransition,
} from '../../../../../../utils/decisionSanitizer'
import { serializeNodeDocument } from '../../../../../../services/decisionFlowService'
import type {
DecisionNodeCondition,
DecisionNodeTrigger,
DecisionNodeTransition,
} from '~~/shared/types/decision'
const ROLE_SET = new Set(['pilot', 'atc', 'system'])
@@ -113,7 +120,49 @@ export default defineEventHandler(async (event) => {
}
if (Array.isArray(body.transitions)) {
node.transitions = body.transitions.map((transition: any, index: number) => sanitizeTransition(transition, index))
let sanitizedTransitions: DecisionNodeTransition[]
try {
sanitizedTransitions = body.transitions.map((transition: any, index: number) =>
sanitizeTransition(transition, index)
)
} catch (error: any) {
throw createError({
statusCode: 400,
statusMessage: error?.message || 'Transition ungültig',
data: { formError: error?.message || 'Transition ungültig', field: 'transitions' },
})
}
node.transitions = sanitizedTransitions
}
if (Array.isArray(body.triggers)) {
let sanitizedTriggers: DecisionNodeTrigger[]
try {
sanitizedTriggers = body.triggers.map((trigger: any, index: number) => sanitizeNodeTrigger(trigger, index))
} catch (error: any) {
throw createError({
statusCode: 400,
statusMessage: error?.message || 'Trigger ungültig',
data: { formError: error?.message || 'Trigger ungültig', field: 'triggers' },
})
}
node.triggers = sanitizedTriggers
}
if (Array.isArray(body.conditions)) {
let sanitizedConditions: DecisionNodeCondition[]
try {
sanitizedConditions = body.conditions.map((condition: any, index: number) =>
sanitizeNodeCondition(condition, index)
)
} catch (error: any) {
throw createError({
statusCode: 400,
statusMessage: error?.message || 'Bedingung ungültig',
data: { formError: error?.message || 'Bedingung ungültig', field: 'conditions' },
})
}
node.conditions = sanitizedConditions
}
const layout = sanitizeLayout(body.layout)