/** * File: route.ts * Created by: AI Assistant * Date: 2025-11-29 * Purpose: Assignment API endpoints for listing and creating assignments * Part of: kreatiVortex - Platform Pembelajaran Tari Online */ import { NextResponse } from 'next/server'; import { prisma } from '@/lib/prisma'; export async function GET(request: Request) { try { const { searchParams } = new URL(request.url); const classId = searchParams.get('classId'); const whereClause: any = { isActive: true }; if (classId) { whereClause.classId = classId; } const assignments = await prisma.assignment.findMany({ where: whereClause, include: { educator: { include: { user: { select: { name: true, image: true, }, }, }, }, class: { select: { name: true, }, }, }, orderBy: { dueDate: 'asc', }, }); return NextResponse.json({ success: true, data: assignments }); } catch (error) { console.error('Error fetching assignments:', error); return NextResponse.json( { success: false, message: 'Failed to fetch assignments' }, { status: 500 } ); } } export async function POST(request: Request) { try { const body = await request.json(); const { title, description, classId, dueDate, maxScore } = body; // Validation if (!title || !description || !classId || !dueDate) { return NextResponse.json( { success: false, message: 'All fields are required' }, { status: 400 } ); } // Mock educator ID for now const educator = await prisma.userProfile.findFirst(); if (!educator) { return NextResponse.json( { success: false, message: 'No user profile found' }, { status: 400 } ); } const assignment = await prisma.assignment.create({ data: { title, description, classId, dueDate: new Date(dueDate), maxScore: Number(maxScore), educatorId: educator.id, createdBy: educator.id, updatedBy: educator.id, }, }); return NextResponse.json({ success: true, data: assignment }); } catch (error) { console.error('Error creating assignment:', error); return NextResponse.json( { success: false, message: 'Failed to create assignment' }, { status: 500 } ); } }