import { notFound, redirect } from 'next/navigation' import { getSession } from '@/lib/auth' import { getAccessibleProduct } from '@/lib/product-access' import { prisma } from '@/lib/prisma' import { SplitPane } from '@/components/split-pane/split-pane' import { PbiList } from '@/components/backlog/pbi-list' import { StoryPanel } from '@/components/backlog/story-panel' import type { Story } from '@/components/backlog/story-panel' import { StartSprintButton } from '@/components/sprint/start-sprint-button' import { ActivateProductButton } from '@/components/shared/activate-product-button' import Link from 'next/link' interface Props { params: Promise<{ id: string }> } export default async function ProductBacklogPage({ params }: Props) { const { id } = await params const session = await getSession() if (!session.userId) redirect('/login') const product = await getAccessibleProduct(id, session.userId) if (!product) notFound() const [activeSprint, user] = await Promise.all([ prisma.sprint.findFirst({ where: { product_id: id, status: 'ACTIVE' } }), prisma.user.findUnique({ where: { id: session.userId! }, select: { active_product_id: true } }), ]) const pbis = await prisma.pbi.findMany({ where: { product_id: id }, orderBy: [{ priority: 'asc' }, { sort_order: 'asc' }], }) const stories = await prisma.story.findMany({ where: { product_id: id }, orderBy: [{ priority: 'asc' }, { sort_order: 'asc' }], select: { id: true, code: true, title: true, description: true, acceptance_criteria: true, priority: true, status: true, pbi_id: true, created_at: true, }, }) // Group stories by PBI id const storiesByPbi: Record = {} for (const story of stories) { if (!storiesByPbi[story.pbi_id]) storiesByPbi[story.pbi_id] = [] storiesByPbi[story.pbi_id].push(story) } const isDemo = session.isDemo ?? false return (
{/* Product header */}

{product.name}

{product.description && (

{product.description}

)}
{user?.active_product_id !== id && ( )} {activeSprint ? ( Sprint actief → ) : ( !isDemo && )} Instellingen
{/* Split pane */}
({ id: p.id, code: p.code, title: p.title, priority: p.priority, description: p.description, created_at: p.created_at }))} isDemo={isDemo} /> } right={ } />
) }