Files
koc-loop/app/api/bootstrap/route.ts
2026-08-11 23:07:26 +08:00

72 lines
2.1 KiB
TypeScript

import { getRuntimeEnv } from "../../../lib/runtime-env";
import { runInBackground } from "../../../lib/background";
const env = getRuntimeEnv();
import { backfillAccountProfiles } from "../../../lib/account-enrichment-service";
import { runDueScheduledCollections } from "../../../lib/collection-service";
import {
resolveCollectionMcpConfig,
type CollectionMcpBindings,
} from "../../../lib/mcp-collection-client";
import {
ensureSchema,
getDashboardData,
getRawDb,
seedIfEmpty,
} from "../../../lib/mvp-db";
import { authForbidden, getRequestPrincipal } from "../../../lib/user-auth";
export async function GET(request: Request) {
const principal = await getRequestPrincipal(request);
if (!principal) return authForbidden();
try {
await ensureSchema();
await seedIfEmpty();
const db = getRawDb();
const mcpConfig = resolveCollectionMcpConfig(
env as unknown as CollectionMcpBindings,
);
const collectionCatchup = runDueScheduledCollections(
db,
Date.now(),
mcpConfig,
"catchup",
).catch((error) => {
console.error(
"KOC collection catchup failed",
error instanceof Error ? error.message : "unknown error",
);
});
const accountBackfill = backfillAccountProfiles(
db,
mcpConfig,
10,
)
.then((result) => {
console.info("KOC account backfill completed", result);
})
.catch((error) => {
console.error(
"KOC account backfill failed",
error instanceof Error ? error.message : "unknown error",
);
});
const catchup = Promise.all([
collectionCatchup,
accountBackfill,
]);
runInBackground(catchup, "bootstrap catchup");
const dashboard = await getDashboardData();
return Response.json(
principal.kind === "user" && principal.user.role === "user"
? { ...dashboard, accounts: [] }
: dashboard,
);
} catch (error) {
return Response.json(
{ error: error instanceof Error ? error.message : "加载失败" },
{ status: 500 },
);
}
}