Files
patchy631--ai-engineering-hub/open-agent-builder/app/api/workflows/[workflowId]/route.ts
T
2026-07-13 12:37:47 +08:00

120 lines
3.0 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { getConvexClient, getAuthenticatedConvexClient, api, isConvexConfigured } from '@/lib/convex/client';
export const dynamic = 'force-dynamic';
/**
* GET /api/workflows/[workflowId] - Get a specific workflow from Convex
*/
export async function GET(
request: NextRequest,
{ params }: { params: Promise<{ workflowId: string }> }
) {
try {
const { workflowId } = await params;
if (!isConvexConfigured()) {
return NextResponse.json(
{ error: 'Convex not configured' },
{ status: 500 }
);
}
const convex = await getAuthenticatedConvexClient();
// Look up by customId first, then try as Convex ID
let workflow = await convex.query(api.workflows.getWorkflowByCustomId, {
customId: workflowId,
});
// If not found and looks like Convex ID, try direct lookup
if (!workflow && workflowId.startsWith('j')) {
try {
workflow = await convex.query(api.workflows.getWorkflow, {
id: workflowId as any,
});
} catch (e) {
// Not a valid Convex ID
}
}
if (!workflow) {
return NextResponse.json(
{ error: `Workflow ${workflowId} not found` },
{ status: 404 }
);
}
return NextResponse.json({
success: true,
workflow: {
...workflow,
id: workflow.customId || workflow._id, // Return customId if exists
},
source: 'convex',
});
} catch (error) {
console.error('Error fetching workflow:', error);
return NextResponse.json(
{
error: 'Failed to fetch workflow',
message: error instanceof Error ? error.message : 'Unknown error',
},
{ status: 500 }
);
}
}
/**
* DELETE /api/workflows/[workflowId] - Delete a workflow from Convex
*/
export async function DELETE(
request: NextRequest,
{ params }: { params: Promise<{ workflowId: string }> }
) {
try {
const { workflowId } = await params;
if (!isConvexConfigured()) {
return NextResponse.json(
{ error: 'Convex not configured' },
{ status: 500 }
);
}
const convex = await getAuthenticatedConvexClient();
// Look up by customId to get Convex ID
const workflow = await convex.query(api.workflows.getWorkflowByCustomId, {
customId: workflowId,
});
if (!workflow) {
return NextResponse.json(
{ error: `Workflow ${workflowId} not found` },
{ status: 404 }
);
}
// Delete using Convex ID
await convex.mutation(api.workflows.deleteWorkflow, {
id: workflow._id,
});
return NextResponse.json({
success: true,
source: 'convex',
message: `Workflow ${workflowId} deleted`,
});
} catch (error) {
console.error('Error deleting workflow:', error);
return NextResponse.json(
{
error: 'Failed to delete workflow',
message: error instanceof Error ? error.message : 'Unknown error',
},
{ status: 500 }
);
}
}