import Member from '../../models/member.js' 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 // Basic auth check // const token = getCookie(event, 'auth-token') || getHeader(event, 'authorization')?.replace('Bearer ', '') // if (!token) { // throw createError({ // statusCode: 401, // statusMessage: 'Authentication required' // }) // } // const config = useRuntimeConfig() // jwt.verify(token, config.jwtSecret) 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) { throw createError({ statusCode: 500, statusMessage: 'Failed to fetch dashboard data' }) } })