73956fd1e3
- Schema: SyncRouteRuleMap junction table, ruleIntent on TenantRule, ForwardFormat/Frequency/ApprovalMode columns on SyncRoute, INTEREST match type - Worker: remove global AUTO_APPROVE forwarding; per-route rule evaluation in ingest processor — POSITIVE rules auto-forward that route, NEGATIVE rules block it, fallback to approvalMode - API: PATCH /routes/:id, rule assign/unassign endpoints, approve now accepts targetGroupIds, new GET /messages/:id/routes for popup data - Web: 5-column route table with settings + rules dialogs, ForwardTarget popup with rule-based pre-selection, ruleIntent toggle + emoji dropdown (👍/👎 only) + INTEREST type in rules manager Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
28 lines
965 B
TypeScript
28 lines
965 B
TypeScript
import { apiFetch, jsonResponse } from '../../../_lib/api';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
export async function PATCH(
|
|
req: Request,
|
|
{ params }: { params: Promise<{ id: string }> },
|
|
): Promise<Response> {
|
|
const { id } = await params;
|
|
const body = await req.text();
|
|
const res = await apiFetch(`/routes/${id}`, { method: 'PATCH', body });
|
|
const text = await res.text();
|
|
let payload: unknown = text;
|
|
try { payload = JSON.parse(text); } catch { /* keep as text */ }
|
|
return jsonResponse(payload, res.status);
|
|
}
|
|
|
|
export async function DELETE(
|
|
_req: Request,
|
|
{ params }: { params: Promise<{ id: string }> },
|
|
): Promise<Response> {
|
|
const { id } = await params;
|
|
const res = await apiFetch(`/routes/${id}`, { method: 'DELETE' });
|
|
if (res.status === 204) return new Response(null, { status: 204 });
|
|
const body = await res.text();
|
|
return new Response(body, { status: res.status, headers: { 'Content-Type': 'application/json' } });
|
|
}
|