import { NextResponse } from 'next/server'; import { getClients } from '@/lib/clients'; import { getAccountConfig } from '@/lib/account-type-resolver'; import { wipeAccountData } from '@/lib/db'; /** * POST /api/accounts/[id]/wipe — drop every cached row for the account and * rebuild it from a fresh Tradovate report. * * Destructive on purpose: cached rows older than the report's 28-day window * cannot be refetched. The UI warns and confirms before calling this. */ export async function POST(_req: Request, { params }: { params: Promise<{ id: string }> }) { const { id } = await params; const accountId = Number(id); if (!Number.isInteger(accountId)) { return NextResponse.json({ error: 'Bad account id' }, { status: 400 }); } for (const client of getClients().values()) { const account = client.accountList.find((a) => a.id === accountId); if (!account) continue; // Read before the wipe: the resolver may un-assign it mid-rebuild. const ours = Boolean(getAccountConfig(accountId).accountType); // Clear the in-memory view too — a failed refetch must leave the // account visibly empty, not showing the data that was just wiped — // and out of trading until a fetch rebuilds it. First, so the client // reads the stored rows it keeps as the rebuild's yardstick. client.forgetHistory(accountId, account.name); wipeAccountData(accountId); await client.fetchDaysTraded([accountId]); const loaded = client.historyReady(accountId) || !ours; return NextResponse.json({ ok: true, entries: (client.dailyPnL[accountId] ?? []).length, daysTraded: client.daysTraded[accountId] ?? 0, fetchError: client.lastFetchErrors[account.name] ?? (loaded ? null : 'History did not reload — the account stays out of trading until it does'), }); } return NextResponse.json({ error: 'Account not found' }, { status: 404 }); }