53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import postgresClient from '@/lib/services/postgres-client';
|
|
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
const { searchParams } = new URL(request.url);
|
|
const limit = Math.min(parseInt(searchParams.get('limit') || '50'), 200);
|
|
const offset = parseInt(searchParams.get('offset') || '0');
|
|
const status = searchParams.get('status');
|
|
const method = searchParams.get('method');
|
|
const branch = searchParams.get('branch');
|
|
|
|
const conditions: string[] = [];
|
|
const params: any[] = [];
|
|
let paramIndex = 1;
|
|
|
|
if (status) {
|
|
conditions.push(`status = $${paramIndex++}`);
|
|
params.push(status);
|
|
}
|
|
if (method) {
|
|
conditions.push(`classification_method = $${paramIndex++}`);
|
|
params.push(method);
|
|
}
|
|
if (branch) {
|
|
conditions.push(`branch = $${paramIndex++}`);
|
|
params.push(branch);
|
|
}
|
|
|
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
|
|
const [executions, countResult] = await Promise.all([
|
|
postgresClient.query(
|
|
`SELECT * FROM workflow_executions ${whereClause} ORDER BY created_at DESC LIMIT $${paramIndex} OFFSET $${paramIndex + 1}`,
|
|
[...params, limit, offset]
|
|
),
|
|
postgresClient.query(
|
|
`SELECT COUNT(*) as total FROM workflow_executions ${whereClause}`,
|
|
params
|
|
),
|
|
]);
|
|
|
|
return NextResponse.json({
|
|
data: executions.rows,
|
|
total: parseInt(countResult.rows[0].total),
|
|
limit,
|
|
offset,
|
|
});
|
|
} catch (error) {
|
|
console.error('Failed to fetch executions:', error);
|
|
return NextResponse.json({ error: 'Failed to fetch executions' }, { status: 500 });
|
|
}
|
|
}
|