wulf-pulse/app/api/data/lookups/route.ts

36 lines
2.1 KiB
TypeScript

import { NextResponse } from 'next/server';
import postgresClient from '@/lib/services/postgres-client';
export async function GET() {
try {
const [statuses, resources, companies, issueTypes, subIssueTypes, queues, configItems, priorities, ticketCategories] = await Promise.all([
postgresClient.query(`SELECT value, label FROM statuses WHERE is_deleted = false ORDER BY value`),
postgresClient.query(`SELECT id, first_name, last_name FROM resources WHERE is_deleted = false ORDER BY last_name, first_name`),
postgresClient.query(`SELECT id, company_name FROM companies WHERE is_deleted = false ORDER BY company_name`),
postgresClient.query(`SELECT value, label FROM issue_types WHERE is_deleted = false ORDER BY label`),
postgresClient.query(`SELECT value, label, parent_value FROM sub_issue_types WHERE is_deleted = false ORDER BY label`),
postgresClient.query(`SELECT value, label FROM queues WHERE is_active = true ORDER BY label`),
postgresClient.query(`SELECT id, reference_title FROM configuration_items WHERE is_deleted = false AND reference_title IS NOT NULL ORDER BY reference_title`),
postgresClient.query(`SELECT value, label FROM priorities WHERE is_active = true ORDER BY sort_order, value`),
postgresClient.query(`SELECT value, label FROM ticket_categories WHERE is_active = true ORDER BY sort_order, value`),
]);
return NextResponse.json({
statuses: statuses.rows,
resources: resources.rows.map((r: any) => ({
id: r.id,
name: [r.first_name, r.last_name].filter(Boolean).join(' ').trim() || `Resource ${r.id}`,
})),
companies: companies.rows.map((c: any) => ({ id: c.id, name: c.company_name })),
issueTypes: issueTypes.rows,
subIssueTypes: subIssueTypes.rows,
queues: queues.rows,
configItems: configItems.rows.map((r: any) => ({ id: r.id, name: r.reference_title })),
priorities: priorities.rows,
ticketCategories: ticketCategories.rows,
});
} catch (error) {
console.error('Failed to fetch lookups:', error);
return NextResponse.json({ error: 'Failed to fetch lookups' }, { status: 500 });
}
}