import { redirect } from 'next/navigation'; import { getCurrentUser, toPublicUser } from '@/lib/auth/getCurrentUser'; import { createMeetingService, createProjectService } from '@/lib/api/services'; import { Header } from '@/components/layout/Header'; import { ProjectNav } from '@/components/layout/ProjectNav'; import { MeetingForm } from '@/components/meetings/MeetingForm'; import { ForbiddenError, NotFoundError } from '@/lib/errors'; export const dynamic = 'force-dynamic'; export default async function MeetingsPage({ params, }: { params: Promise<{ projectId: string }>; }) { const user = await getCurrentUser(); if (!user) redirect('/login'); const { projectId } = await params; const projectService = createProjectService(); let project: Awaited>; try { project = projectService.getProject(user.id, Number(projectId)); } catch (error) { if (error instanceof ForbiddenError || error instanceof NotFoundError) { redirect('/dashboard'); } throw error; } const meetingService = createMeetingService(); const meetings = meetingService.getMeetings(user.id, project.id); const members = projectService.getMembers(user.id, project.id).map((m) => ({ userId: m.userId, name: m.user.name, })); return (

ミーティング

{meetings.length === 0 ? (

ミーティングはありません。

) : ( meetings.map((m) => (

{m.title}

{m.startAt} 〜 {m.endAt}

{m.location && (

場所: {m.location}

)} {m.minutesMd && (

議事録あり

)}
)) )}
); }