diff --git a/scripts/user-profile.test.ts b/scripts/user-profile.test.ts index c4d36bd..1e2907e 100644 --- a/scripts/user-profile.test.ts +++ b/scripts/user-profile.test.ts @@ -189,6 +189,10 @@ async function runFetchUserProfileAfterBodyConsumed(): Promise<{ assert.equal(auth, "Bearer test-a2a-key", "A2A key must be used downstream"); assert.equal(forwardedScope, null, "user scope must be encoded in URL, not forwarded as trust header"); assert.equal((profile.preferences as Record).onboarding.revision, 10); + const onboarding = (profile.preferences as Record).onboarding; + assert.equal(onboarding.status, "completed"); + assert.equal(onboarding.profile.icp, "experienced"); + assert.equal(onboarding.access_choice, "trial"); } finally { Object.assign(mutableConfig, savedConfig); globalThis.fetch = originalFetch; diff --git a/src/v1/curator/curator-routes.ts b/src/v1/curator/curator-routes.ts index eecec9a..edc7e39 100644 --- a/src/v1/curator/curator-routes.ts +++ b/src/v1/curator/curator-routes.ts @@ -1,11 +1,9 @@ import { Hono } from "hono"; import { z } from "zod"; -import { eq } from "drizzle-orm"; import { createClient, type Client } from "rivetkit/client"; import { requireUser, type AuthContext } from "../../auth/clerk.js"; import { config } from "../../config.js"; -import { db } from "../../db/client.js"; -import { onboarding } from "../../db/schema.js"; +import { fetchOnboardingReadProfile } from "../../services/user-profile.js"; import type { Registry } from "../../actors/registry.js"; import { buildCuratorSprint, buildCuratorSprintReport, buildCuratorTasks } from "./curator-store.js"; @@ -38,13 +36,19 @@ export function v1CuratorRoutes() { app.get("/sprint", async (c) => { const userId = c.get("userId"); - const savedOnboarding = await db.query.onboarding.findFirst({ - where: eq(onboarding.userId, userId), - }); - if (savedOnboarding?.data?.status !== "completed") { + const profile = await fetchOnboardingReadProfile(c.req.raw, userId); + const preferences = profile.preferences && typeof profile.preferences === "object" && !Array.isArray(profile.preferences) + ? profile.preferences as Record + : {}; + const onboarding = preferences.onboarding && typeof preferences.onboarding === "object" && !Array.isArray(preferences.onboarding) + ? preferences.onboarding as Record + : {}; + if (onboarding.status !== "completed") { return c.json({ error: "onboarding_incomplete" }, 409); } - return c.json(await buildCuratorSprint(userId, c.req.query("date"))); + return c.json(await buildCuratorSprint(userId, c.req.query("date"), { + onboardingContext: { preferences, onboarding }, + })); }); app.get("/sprint/report", async (c) => {