'use server' import { revalidatePath } from 'next/cache' import { cookies } from 'next/headers' import { getIronSession } from 'iron-session' import { z } from 'zod' import { prisma } from '@/lib/prisma' import { SessionData, sessionOptions } from '@/lib/session' import { productAccessFilter } from '@/lib/product-access' import { setActiveSprintCookie } from '@/lib/active-sprint' async function getSession() { return getIronSession(await cookies(), sessionOptions) } const setSchema = z.object({ productId: z.string().min(1), sprintId: z.string().min(1), }) export async function setActiveSprintAction(productId: string, sprintId: string) { const session = await getSession() if (!session.userId) return { error: 'Niet ingelogd' } if (session.isDemo) return { error: 'Niet beschikbaar in demo-modus' } const parsed = setSchema.safeParse({ productId, sprintId }) if (!parsed.success) return { error: 'Ongeldig product- of sprint-id' } const sprint = await prisma.sprint.findFirst({ where: { id: parsed.data.sprintId, product_id: parsed.data.productId, product: productAccessFilter(session.userId), }, select: { id: true }, }) if (!sprint) return { error: 'Sprint niet gevonden of niet toegankelijk' } await setActiveSprintCookie(parsed.data.productId, parsed.data.sprintId) revalidatePath('/', 'layout') return { success: true, sprintId: parsed.data.sprintId } } export async function syncActiveSprintCookieAction(productId: string, sprintId: string) { const session = await getSession() if (!session.userId) return if (session.isDemo) return const parsed = setSchema.safeParse({ productId, sprintId }) if (!parsed.success) return const sprint = await prisma.sprint.findFirst({ where: { id: parsed.data.sprintId, product_id: parsed.data.productId, product: productAccessFilter(session.userId), }, select: { id: true }, }) if (!sprint) return await setActiveSprintCookie(parsed.data.productId, parsed.data.sprintId) }