wulf-pulse/app/api/ticket-workflows/[id]/steps/route.ts

65 lines
2 KiB
TypeScript

/**
* PUT /api/ticket-workflows/:id/steps - Replace all steps (bulk update)
*/
import { NextRequest, NextResponse } from 'next/server';
import { postgresClient } from '@/lib/services/postgres-client';
import { TicketWorkflowStep } from '@/lib/types/ticket-workflow';
export async function PUT(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
try {
const { id } = await params;
const body = await request.json();
const { steps } = body;
if (!Array.isArray(steps)) {
return NextResponse.json(
{ error: 'Invalid request: steps must be an array' },
{ status: 400 }
);
}
// Use transaction to replace all steps
await postgresClient.transaction(async (client) => {
// Delete existing steps
await client.query('DELETE FROM ticket_workflow_steps WHERE workflow_id = $1', [id]);
// Insert new steps
for (const step of steps) {
await client.query(
`INSERT INTO ticket_workflow_steps
(workflow_id, step_order, step_type, name, config, on_failure, skip_to_step, is_active, condition)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`,
[
id,
step.step_order,
step.step_type,
step.name,
JSON.stringify(step.config || {}),
step.on_failure || 'continue',
step.skip_to_step || null,
step.is_active !== undefined ? step.is_active : true,
step.condition ? JSON.stringify(step.condition) : null
]
);
}
});
// Fetch updated steps
const result = await postgresClient.query<TicketWorkflowStep>(
`SELECT * FROM ticket_workflow_steps WHERE workflow_id = $1 ORDER BY step_order`,
[id]
);
return NextResponse.json({ steps: result.rows });
} catch (error) {
console.error('[API] Error updating workflow steps:', error);
return NextResponse.json(
{ error: error instanceof Error ? error.message : 'Failed to update steps' },
{ status: 500 }
);
}
}