import { can } from "@wrnexus/authz"; import { getDb } from "@wrnexus/db"; import type { Context } from "@wrnexus/core"; import { ensureCrmWorkspace } from "../lib/workspace.ts"; export async function GET(ctx: Context): Promise { if (!(await can(ctx, "crm:dashboard"))) return Response.json({ error: "Forbidden" }, { status: 403 }); const owner = String((ctx.user as { id?: unknown } | undefined)?.id ?? ""); await ensureCrmWorkspace(owner); const metrics = await getDb().one<{ pipeline_value_cents: number; open_opportunities: number; contacts: number; }>( `SELECT COALESCE((SELECT SUM(value_cents) FROM crm_deals WHERE owner_id = ? AND stage NOT IN ('won','lost')), 0) pipeline_value_cents, (SELECT COUNT(*) FROM crm_deals WHERE owner_id = ? AND stage NOT IN ('won','lost')) open_opportunities, (SELECT COUNT(*) FROM crm_contacts WHERE owner_id = ?) contacts`, [owner, owner, owner], ); return Response.json({ metrics: { pipelineValue: new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", maximumFractionDigits: 0, }).format(Number(metrics?.pipeline_value_cents ?? 0) / 100), openOpportunities: Number(metrics?.open_opportunities ?? 0), contacts: Number(metrics?.contacts ?? 0), }, }); }