import Event from "../../models/event.js"; import { connectDB } from "../../utils/mongoose.js"; import { requireAdmin } from "../../utils/auth.js"; import { validateBody } from "../../utils/validateBody.js"; import { adminEventCreateSchema } from "../../utils/schemas.js"; export default defineEventHandler(async (event) => { try { const admin = await requireAdmin(event); const body = await validateBody(event, adminEventCreateSchema); await connectDB(); const eventData = { ...body, createdBy: admin.email, startDate: new Date(body.startDate), endDate: new Date(body.endDate), registrationDeadline: body.registrationDeadline ? new Date(body.registrationDeadline) : null, }; // Ensure slug is not included in eventData (let the model generate it) delete eventData.slug; // Handle ticket data if (body.tickets) { eventData.tickets = { enabled: body.tickets.enabled || false, public: { available: body.tickets.public?.available || false, name: body.tickets.public?.name || "Public Ticket", description: body.tickets.public?.description || "", price: body.tickets.public?.price || 0, quantity: body.tickets.public?.quantity || null, sold: 0, // Initialize sold count earlyBirdPrice: body.tickets.public?.earlyBirdPrice || null, earlyBirdDeadline: body.tickets.public?.earlyBirdDeadline ? new Date(body.tickets.public.earlyBirdDeadline) : null, }, }; } const newEvent = new Event(eventData); const savedEvent = await newEvent.save(); return savedEvent; } catch (error) { if (error.statusCode) throw error; console.error("Error creating event:", error); throw createError({ statusCode: 500, statusMessage: error.message || "Failed to create event", }); } });