import { cookies } from 'next/headers' import type { SprintStatus } from '@prisma/client' import { prisma } from '@/lib/prisma' export type ActiveSprint = { id: string code: string status: SprintStatus } function cookieName(productId: string): string { return `active_sprint_${productId}` } export async function getActiveSprintIdFromCookie( productId: string, ): Promise { const store = await cookies() return store.get(cookieName(productId))?.value ?? null } export async function setActiveSprintCookie( productId: string, sprintId: string, ): Promise { const store = await cookies() store.set(cookieName(productId), sprintId, { path: '/', sameSite: 'lax', secure: process.env.NODE_ENV === 'production', maxAge: 60 * 60 * 24 * 365, }) } export async function clearActiveSprintCookie(productId: string): Promise { const store = await cookies() store.delete(cookieName(productId)) } export async function resolveActiveSprint( productId: string, ): Promise { const cookieId = await getActiveSprintIdFromCookie(productId) if (cookieId) { const sprint = await prisma.sprint.findFirst({ where: { id: cookieId, product_id: productId }, select: { id: true, code: true, status: true }, }) if (sprint) return sprint } const open = await prisma.sprint.findFirst({ where: { product_id: productId, status: 'OPEN' }, orderBy: { created_at: 'desc' }, select: { id: true, code: true, status: true }, }) if (open) return open const closed = await prisma.sprint.findFirst({ where: { product_id: productId, status: 'CLOSED' }, orderBy: { created_at: 'desc' }, select: { id: true, code: true, status: true }, }) return closed ?? null }