"use server"; import { prisma } from "@/lib/db"; import { requireUserId } from "@/lib/auth-helpers"; import { projectAccessFilter } from "@/lib/access"; import { getBoard } from "@/lib/board"; import type { CategoryDTO } from "@/types/board"; /** * A fresh read of one board for the client's cross-device sync (see the * poll in board-context.tsx). Returns the exact same shape the page's * server component renders, so BoardProvider can diff it against its own * state and apply it only if something actually changed. `projectId` null * is Home scope -- same convention as getScheduledBoard. */ export async function getBoardSnapshot(projectId: string | null): Promise { const userId = await requireUserId(); if (projectId) { const project = await prisma.project.findFirst({ where: { id: projectId, ...projectAccessFilter(userId) }, select: { id: true }, }); if (!project) throw new Error("Project not found"); return getBoard({ projectId: project.id }); } return getBoard({ userId, projectId: null }); }