import Event from "../../models/event.js"; import { connectDB } from "../../utils/mongoose.js"; import jwt from "jsonwebtoken"; export default defineEventHandler(async (event) => { try { // TODO: Temporarily disabled auth for testing - enable when authentication is set up // const token = getCookie(event, 'auth-token') || getHeader(event, 'authorization')?.replace('Bearer ', '') // if (!token) { // throw createError({ // statusCode: 401, // statusMessage: 'Authentication required' // }) // } // const config = useRuntimeConfig() // const decoded = jwt.verify(token, config.jwtSecret) const body = await readBody(event); // Validate required fields if (!body.title || !body.description || !body.startDate || !body.endDate) { throw createError({ statusCode: 400, statusMessage: "Missing required fields", }); } await connectDB(); const eventData = { ...body, createdBy: "admin@ghostguild.org", // TODO: Use actual authenticated user 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) { console.error("Error creating event:", error); throw createError({ statusCode: 500, statusMessage: error.message || "Failed to create event", }); } });