import { NextResponse } from 'next/server'; import { getClients } from '@/lib/clients'; import { wipeAccountData } from '@/lib/db'; /** * POST /api/accounts/wipe-all — the bulk form of /api/accounts/[id]/wipe: * drop every account's cached rows on every firm and rebuild them all from * fresh Tradovate reports. One report per account, so this takes a while on * big rosters; firms run in parallel, accounts within a firm sequentially * (that's fetchDaysTraded's own pacing against the flaky report server). * * Same destructive caveat as the single wipe: cached rows older than the * report's 28-day window cannot be refetched. The UI confirms first. */ export async function POST() { const clients = [...getClients().values()]; let wiped = 0; let failedAccounts = 0; await Promise.all(clients.map(async (client) => { // Forgotten, the accounts read unloaded and stay out of trading // until the refetch below (or, if it fails, a later one) lands. const ids = client.accountList.map((account) => account.id); for (const account of client.accountList) { wipeAccountData(account.id); client.forgetHistory(account.id, account.name); wiped++; } await client.fetchDaysTraded(); // Counted from the result, not the fetch's own tally: a client with // no session fetches nothing and reports no failures. failedAccounts += ids.filter((id) => !client.historyReady(id)).length; })); return NextResponse.json({ ok: true, wiped, failedAccounts }); }