import Event from "../../models/event.js"; import { connectDB } from "../../utils/mongoose.js"; export default defineEventHandler(async (event) => { try { // Ensure database connection await connectDB(); // Get query parameters for filtering const query = getQuery(event); const filter = {}; // Only show visible events on public calendar (unless specifically requested) if (query.includeHidden !== "true") { filter.isVisible = true; } // Filter for upcoming events only if requested if (query.upcoming === "true") { filter.startDate = { $gte: new Date() }; } // Filter by event type if provided if (query.eventType) { filter.eventType = query.eventType; } // Filter for members-only events if (query.membersOnly !== undefined) { filter.membersOnly = query.membersOnly === "true"; } // Fetch events from database const events = await Event.find(filter) .sort({ startDate: 1 }) .select("-registrations") // Don't expose registration details in list view .lean(); // Add computed fields const eventsWithMeta = events.map((event) => ({ ...event, id: event._id.toString(), registeredCount: event.registrations?.length || 0, })); return eventsWithMeta; } catch (error) { console.error("Error fetching events:", error); throw createError({ statusCode: 500, statusMessage: "Failed to fetch events", }); } });