← 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 });
}