← back to Norma

app/api/accounts/[id]/keywords/route.ts

38 lines

import { NextRequest, NextResponse } from 'next/server';
import { query } from '@/lib/db';
import { requireRole } from '@/lib/require-role';

/**
 * PATCH /api/accounts/:id/keywords
 * Update an org's search_keywords array.
 */
export async function PATCH(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> },
) {
  const auth = requireRole(request, 'admin', 'staff');
  if (auth instanceof NextResponse) return auth;

  try {
    const { id } = await params;
    const data = await request.json();
    const keywords: string[] = Array.isArray(data.keywords) ? data.keywords : [];

    // Sanitize keywords
    const clean = keywords
      .map((k: string) => String(k).trim().toLowerCase())
      .filter((k: string) => k.length > 0 && k.length < 100)
      .slice(0, 50); // Max 50 keywords

    await query(
      `UPDATE nonprofit_accounts SET search_keywords = $1, updated_at = NOW() WHERE id = $2`,
      [clean, id],
    );

    return NextResponse.json({ keywords: clean });
  } catch (err) {
    console.error('[api/accounts/keywords] PATCH error:', (err as Error).message);
    return NextResponse.json({ error: 'Failed to update keywords' }, { status: 500 });
  }
}