import { NextRequest, NextResponse } from 'next/server'; import { getServerSession } from 'next-auth'; import { authOptions } from '@/lib/auth'; import { db } from '@/lib/db'; import { classes, periods, eq } from '@/lib/db/schema'; export async function GET() { try { const session = await getServerSession(authOptions); if (!session?.user || session.user.role !== 'admin') { return NextResponse.json( { error: 'No autorizado' }, { status: 401 } ); } const allClasses = await db .select({ id: classes.id, name: classes.name, code: classes.code, credits: classes.credits, description: classes.description, periodId: classes.periodId, isActive: classes.isActive, createdAt: classes.createdAt, period: { id: periods.id, name: periods.name, startDate: periods.startDate, endDate: periods.endDate, isActive: periods.isActive, }, }) .from(classes) .leftJoin(periods, eq(classes.periodId, periods.id)) .orderBy(classes.name); return NextResponse.json(allClasses); } catch (error) { console.error('Error fetching classes:', error); return NextResponse.json( { error: 'Error interno del servidor' }, { status: 500 } ); } } export async function POST(request: NextRequest) { try { const session = await getServerSession(authOptions); if (!session?.user || session.user.role !== 'admin') { return NextResponse.json( { error: 'No autorizado' }, { status: 401 } ); } const { name, code, credits, description, periodId } = await request.json(); // Validaciones if (!name || !code || !credits || !periodId) { return NextResponse.json( { error: 'Nombre, código, créditos y período académico son requeridos' }, { status: 400 } ); } if (typeof credits !== 'number' || credits < 1) { return NextResponse.json( { error: 'Los créditos deben ser un número mayor a 0' }, { status: 400 } ); } // Verificar si ya existe una clase con el mismo código const existingClass = await db .select() .from(classes) .where(eq(classes.code, code)) .limit(1); if (existingClass.length > 0) { return NextResponse.json( { error: 'Ya existe una clase con este código' }, { status: 400 } ); } // Crear clase const [newClass] = await db .insert(classes) .values({ name, code, credits, description: description || null, periodId, isActive: true, }) .returning({ id: classes.id, name: classes.name, code: classes.code, credits: classes.credits, description: classes.description, periodId: classes.periodId, isActive: classes.isActive, createdAt: classes.createdAt, }); return NextResponse.json(newClass, { status: 201 }); } catch (error) { console.error('Error creating class:', error); return NextResponse.json( { error: 'Error interno del servidor' }, { status: 500 } ); } }