| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- 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 }
- );
- }
- }
|