import { NextRequest, NextResponse } from 'next/server'; import { getSession } from '@/lib/session'; import { db } from '@/lib/db'; import { timeSlots } from '@/lib/db/schema'; import { eq } from 'drizzle-orm'; import { logActivity, ACTIONS, ENTITY_TYPES } from '@/lib/activity-logger'; export async function GET(request: NextRequest) { try { const session = await getSession(); if (!session || session.role !== 'admin') { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const allTimeSlots = await db .select() .from(timeSlots) .orderBy(timeSlots.dayOfWeek, timeSlots.startTime); return NextResponse.json({ timeSlots: allTimeSlots, }); } catch (error) { console.error('Error fetching time slots:', error); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } } export async function POST(request: NextRequest) { try { const session = await getSession(); if (!session || session.role !== 'admin') { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } const { dayOfWeek, startTime, endTime, isActive = true } = await request.json(); if (dayOfWeek === undefined || !startTime || !endTime) { return NextResponse.json( { error: 'Missing required fields: dayOfWeek, startTime, endTime' }, { status: 400 } ); } // Validate day of week (0-6) if (dayOfWeek < 0 || dayOfWeek > 6) { return NextResponse.json( { error: 'dayOfWeek must be between 0 (Sunday) and 6 (Saturday)' }, { status: 400 } ); } // Validate time format (HH:MM) const timeRegex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/; if (!timeRegex.test(startTime) || !timeRegex.test(endTime)) { return NextResponse.json( { error: 'Invalid time format. Use HH:MM format' }, { status: 400 } ); } const newTimeSlot = await db .insert(timeSlots) .values({ id: crypto.randomUUID(), dayOfWeek, startTime, endTime, isActive, createdAt: new Date(), updatedAt: new Date(), }) .returning(); await logActivity({ userId: session.userId, action: ACTIONS.TIME_SLOT_CREATE, entityType: ENTITY_TYPES.TIME_SLOT, entityId: newTimeSlot[0].id, details: { dayOfWeek, startTime, endTime }, }); return NextResponse.json({ message: 'Time slot created successfully', timeSlot: newTimeSlot[0], }); } catch (error) { console.error('Error creating time slot:', error); return NextResponse.json({ error: 'Internal server error' }, { status: 500 }); } }