import { NextRequest, NextResponse } from 'next/server'; import { getDataSource, Post } from '@/lib/database'; // GET /api/posts - Get all posts export async function GET(request: NextRequest) { try { const dataSource = await getDataSource(); const postRepository = dataSource.getRepository(Post); // Get query parameters 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 queryBuilder = postRepository.createQueryBuilder('post') .leftJoinAndSelect('post.user', 'user') .leftJoinAndSelect('post.parent', 'parent') .orderBy('post.createdAt', 'DESC'); // Filter by parentId if provided if (parentId) { if (parentId === 'null') { // Get root posts (no parent) queryBuilder = queryBuilder.where('post.parentId IS NULL'); } else { // Get children of specific parent queryBuilder = queryBuilder.where('post.parentId = :parentId', { parentId }); } } // Get total count for pagination const totalCount = await queryBuilder.getCount(); // 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( { error: 'Failed to fetch posts' }, { status: 500 } ); } } // POST /api/posts - Create a new post export async function POST(request: NextRequest) { try { const data = await request.json(); const { title, content, userId, parentId } = data; // Validate required fields if (!title || !content || !userId) { return NextResponse.json( { error: 'Title, content, and userId are required' }, { status: 400 } ); } const dataSource = await getDataSource(); const postRepository = dataSource.getRepository(Post); // Create new post const newPost = postRepository.create({ title, content, userId, parentId: parentId || null }); await postRepository.save(newPost); return NextResponse.json(newPost, { status: 201 }); } catch (error) { console.error('Error creating post:', error); return NextResponse.json( { error: 'Failed to create post' }, { status: 500 } ); } }