add pagination

This commit is contained in:
Ken Yasue
2025-03-25 13:37:29 +01:00
parent eb2cb72ea4
commit cba6c9ba67
12 changed files with 1230 additions and 448 deletions

View File

@ -11,8 +11,13 @@ export async function GET(request: NextRequest) {
const url = new URL(request.url);
const parentId = url.searchParams.get('parentId');
// Pagination parameters
const page = parseInt(url.searchParams.get('page') || '1');
const pageSize = parseInt(url.searchParams.get('pageSize') || '10');
const skip = (page - 1) * pageSize;
// Build query
let query = postRepository.createQueryBuilder('post')
let queryBuilder = postRepository.createQueryBuilder('post')
.leftJoinAndSelect('post.user', 'user')
.leftJoinAndSelect('post.parent', 'parent')
.orderBy('post.createdAt', 'DESC');
@ -21,16 +26,36 @@ export async function GET(request: NextRequest) {
if (parentId) {
if (parentId === 'null') {
// Get root posts (no parent)
query = query.where('post.parentId IS NULL');
queryBuilder = queryBuilder.where('post.parentId IS NULL');
} else {
// Get children of specific parent
query = query.where('post.parentId = :parentId', { parentId });
queryBuilder = queryBuilder.where('post.parentId = :parentId', { parentId });
}
}
const posts = await query.getMany();
// Get total count for pagination
const totalCount = await queryBuilder.getCount();
return NextResponse.json(posts);
// Apply pagination
queryBuilder = queryBuilder
.skip(skip)
.take(pageSize);
// Execute query
const posts = await queryBuilder.getMany();
// Calculate total pages
const totalPages = Math.ceil(totalCount / pageSize);
return NextResponse.json({
data: posts,
pagination: {
page,
pageSize,
totalCount,
totalPages
}
});
} catch (error) {
console.error('Error fetching posts:', error);
return NextResponse.json(