File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import type { Metadata } from 'next';
import { verifySession } from '@/lib/auth/dal';
import { fetchStudentMembers } from '@/lib/data/repositories/student-member-repository';
import { parseStudentMemberQuery } from '@/lib/domain/student-member-query';
import { StudentListToolbar } from './_components/student-list-toolbar';
import { StudentSearchBar } from './_components/student-search-bar';
export const metadata: Metadata = {
title: '학생 회원',
};
interface PageProps {
searchParams: Promise<Record<string, string | string[] | undefined>>;
}
// 결과 테이블·페이지네이션은 별도 커밋(T3)에서 연결한다 — 여기서는 검색·정렬·표시개수의
// searchParams 배선과 요약 카운트까지만 담당한다(§4.1 승인 범위 한정).
export default async function Page({ searchParams }: PageProps) {
await verifySession();
const query = parseStudentMemberQuery(await searchParams);
const { totalCount } = await fetchStudentMembers(query);
const totalPages = Math.max(1, Math.ceil(totalCount / query.pageSize));
return (
<section className="flex flex-1 flex-col gap-6 p-8">
<h1 className="text-headline-sm text-foreground">학생 회원 목록</h1>
<StudentSearchBar query={query} />
<StudentListToolbar query={query} />
<p className="text-body-md text-foreground-muted">
총 {totalCount}명 | 현재페이지 {Math.min(query.page, totalPages)}/
{totalPages}
</p>
</section>
);
}