← back to Norma
app/api/settings/people/route.ts
61 lines
import { NextRequest, NextResponse } from 'next/server';
import { requireRole } from '@/lib/require-role';
import { query } from '@/lib/db';
import { getOrgId } from '@/lib/orgId';
const SETTING_KEY = 'org_people';
function settingKey(orgId: string | null): string {
return orgId ? `${SETTING_KEY}_${orgId}` : SETTING_KEY;
}
/**
* GET /api/settings/people — Get employee names, org aliases, competitors
*/
export async function GET(request: NextRequest) {
const auth = requireRole(request, 'admin');
if (auth instanceof NextResponse) return auth;
const orgId = auth.role === 'admin' ? getOrgId(request) : auth.orgId;
const key = settingKey(orgId);
const result = await query('SELECT value FROM app_settings WHERE key = $1', [key]);
if (result.rows.length === 0) {
return NextResponse.json({ employees: [], competitors: [], aliases: [] });
}
const val = result.rows[0].value;
return NextResponse.json({
employees: val.employees || [],
competitors: val.competitors || [],
aliases: val.aliases || [],
});
}
/**
* PUT /api/settings/people — Save employee names, org aliases, competitors
*/
export async function PUT(request: NextRequest) {
const auth = requireRole(request, 'admin');
if (auth instanceof NextResponse) return auth;
const orgId = auth.role === 'admin' ? getOrgId(request) : auth.orgId;
const key = settingKey(orgId);
const body = await request.json();
const value = {
employees: Array.isArray(body.employees) ? body.employees : [],
competitors: Array.isArray(body.competitors) ? body.competitors : [],
aliases: Array.isArray(body.aliases) ? body.aliases : [],
};
await query(
`INSERT INTO app_settings (key, value, updated_at)
VALUES ($1, $2::jsonb, now())
ON CONFLICT (key) DO UPDATE SET value = $2::jsonb, updated_at = now()`,
[key, JSON.stringify(value)],
);
return NextResponse.json({ success: true, ...value });
}