import Member from '../../models/member.js' import Event from '../../models/event.js' import { connectDB } from '../../utils/mongoose.js' import { requireAdmin } from '../../utils/auth.js' export default defineEventHandler(async (event) => { try { await requireAdmin(event) await connectDB() // Get stats const totalMembers = await Member.countDocuments() const now = new Date() const activeEvents = await Event.countDocuments({ startDate: { $lte: now }, endDate: { $gte: now } }) // Calculate monthly revenue from member contributions const members = await Member.find({}, 'contributionTier').lean() const monthlyRevenue = members.reduce((total, member) => { return total + parseInt(member.contributionTier || '0') }, 0) const pendingSlackInvites = await Member.countDocuments({ slackInvited: false }) // Get recent members (last 5) const recentMembers = await Member.find() .sort({ createdAt: -1 }) .limit(5) .lean() // Get upcoming events (next 5) const upcomingEvents = await Event.find({ startDate: { $gte: now } }) .sort({ startDate: 1 }) .limit(5) .lean() return { stats: { totalMembers, activeEvents, monthlyRevenue, pendingSlackInvites }, recentMembers, upcomingEvents } } catch (error) { if (error.statusCode) throw error throw createError({ statusCode: 500, statusMessage: 'Failed to fetch dashboard data' }) } })