import { redirect } from 'next/navigation'; import { getCurrentUser, toPublicUser } from '@/lib/auth/getCurrentUser'; import { createProjectService } from '@/lib/api/services'; import { Header } from '@/components/layout/Header'; import { ProjectNav } from '@/components/layout/ProjectNav'; import { DashboardWidget } from '@/components/project/DashboardWidget'; import { ForbiddenError, NotFoundError } from '@/lib/errors'; export const dynamic = 'force-dynamic'; const STATUS_LABELS: Record = { active: 'Active', on_hold: 'On Hold', completed: 'Completed', archived: 'Archived', }; export default async function ProjectOverviewPage({ params, }: { params: Promise<{ projectId: string }>; }) { const user = await getCurrentUser(); if (!user) { redirect('/login'); } const { projectId } = await params; const service = createProjectService(); let dashboard; try { dashboard = service.getDashboard(user.id, Number(projectId)); } catch (error) { if (error instanceof ForbiddenError || error instanceof NotFoundError) { redirect('/dashboard'); } throw error; } const { project, members } = dashboard; return (

{project.name}

{STATUS_LABELS[project.status] ?? project.status}
{project.description && (

{project.description}

)}

メンバー数: {members.length}

); }