From a9e73e8e0bd7e3944c3eedd58bd7d64aed7d9392 Mon Sep 17 00:00:00 2001 From: Henry Winkel Date: Sat, 16 May 2026 14:19:10 +0200 Subject: [PATCH] API: support background analyze - enqueue TradingGraph and persist decision to DB when body.background is true\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- app/routes/api/analyze.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/app/routes/api/analyze.ts b/app/routes/api/analyze.ts index 2c15b53..7de0aa8 100644 --- a/app/routes/api/analyze.ts +++ b/app/routes/api/analyze.ts @@ -1,5 +1,6 @@ import { OpenRouterClient } from "../../lib/openrouter"; import { TradingGraph } from "../../agents/tradingGraph"; +import { db } from "../../lib/db.server"; export async function action({ request }: { request: Request }) { console.log("[analyze] Request received:", request.method, request.url); @@ -72,6 +73,37 @@ export async function action({ request }: { request: Request }) { try { console.log("[analyze] Running trading graph..."); + + if (body.background) { + // Run in background: start async propagation and return 202 immediately + (async () => { + try { + const decision = await graph.propagate(ticker, input); + console.log("[analyze] Background decision received:", JSON.stringify(decision)); + // persist last decision to DB + await db.stock.upsert({ + where: { ticker }, + create: { + ticker, + lastDecision: decision.action as string, + lastExplanation: (decision as any).reasoning || null, + lastExecutionPlan: decision.executionPlan ? JSON.stringify(decision.executionPlan) : null, + }, + update: { + lastDecision: decision.action as string, + lastExplanation: (decision as any).reasoning || null, + lastExecutionPlan: decision.executionPlan ? JSON.stringify(decision.executionPlan) : null, + }, + }); + console.log("[analyze] Background decision saved to DB for", ticker); + } catch (bgErr) { + console.error("[analyze] Background error:", bgErr); + } + })(); + + return Response.json({ status: "queued" }, { status: 202 }); + } + const decision = await graph.propagate(ticker, input); console.log("[analyze] Decision received:", JSON.stringify(decision)); return Response.json(decision);