import { NextResponse } from "next/server"; import { createSupabaseRouteClient } from "@/lib/supabase/server"; import { ensureDefaultWorkspace, fetchWorkspaceSummaries } from "@/lib/workspaces"; import { fetchSidebarDataset } from "@/lib/sidebar-tree"; import type { SidebarInitialData } from "@/components/sidebar/types"; import { detectLocalMindmapDocs } from "@/lib/mindmap-files"; export const dynamic = "force-dynamic"; export async function GET(request: Request) { const supabase = await createSupabaseRouteClient(); const { data: { session }, } = await supabase.auth.getSession(); if (!session) { return NextResponse.json({ error: "未登录" }, { status: 401 }); } const url = new URL(request.url); const workspaceIdParam = url.searchParams.get("workspaceId"); await ensureDefaultWorkspace(supabase, session.user.id, session.user.email ?? "我的空间"); const { workspaces, activeWorkspaceId } = await fetchWorkspaceSummaries(supabase, session.user.id); const targetWorkspaceId = workspaceIdParam || activeWorkspaceId; if (!targetWorkspaceId) { return NextResponse.json({ error: "暂无可用工作空间" }, { status: 404 }); } try { const dataset = await fetchSidebarDataset(supabase, targetWorkspaceId); const localMindmaps = await detectLocalMindmapDocs( dataset.documents.map((d) => d.id), ); const mindmapDocs = Array.from( new Set([...(dataset.mindmapDocs ?? []), ...localMindmaps]), ); const payload: SidebarInitialData = { activeWorkspaceId: targetWorkspaceId, workspaces, documents: dataset.documents, trashedDocuments: dataset.trashedDocuments, mindmapDocs, mediaAssets: dataset.mediaAssets ?? [], }; return NextResponse.json(payload); } catch (error) { return NextResponse.json( { error: error instanceof Error ? error.message : "拉取侧边栏数据失败" }, { status: 500 }, ); } }