import Event from '../../models/event.js' import { connectDB } from '../../utils/mongoose.js' export default defineEventHandler(async (event) => { try { await connectDB() const id = getRouterParam(event, 'id') if (!id) { throw createError({ statusCode: 400, statusMessage: 'Series ID is required' }) } // Fetch all events in this series const events = await Event.find({ 'series.id': id, 'series.isSeriesEvent': true }) .sort({ 'series.position': 1, startDate: 1 }) .select('-registrations') .lean() if (events.length === 0) { throw createError({ statusCode: 404, statusMessage: 'Event series not found' }) } // Get series metadata from the first event const seriesInfo = events[0].series // Calculate series statistics const now = new Date() const completedEvents = events.filter(e => e.endDate < now).length const upcomingEvents = events.filter(e => e.startDate > now).length const ongoingEvents = events.filter(e => e.startDate <= now && e.endDate >= now).length const firstEventDate = events[0].startDate const lastEventDate = events[events.length - 1].endDate // Return series with additional metadata return { id: id, title: seriesInfo.title, description: seriesInfo.description, type: seriesInfo.type, totalEvents: seriesInfo.totalEvents, startDate: firstEventDate, endDate: lastEventDate, events: events.map(e => ({ ...e, id: e._id.toString() })), statistics: { totalEvents: events.length, completedEvents, upcomingEvents, ongoingEvents, isOngoing: firstEventDate <= now && lastEventDate >= now, isUpcoming: firstEventDate > now, isCompleted: lastEventDate < now, totalRegistrations: events.reduce((sum, e) => sum + (e.registrations?.length || 0), 0) } } } catch (error) { console.error('Error fetching event series:', error) if (error.statusCode) throw error throw createError({ statusCode: 500, statusMessage: 'Failed to fetch event series' }) } })