const express = require('express'); const router = express.Router(); const { PrismaClient } = require('@prisma/client'); const { verifyToken, isAdmin } = require('../middleware/auth'); // const { sendApprovalEmail } = require('../config/email'); // We can add this later! const prisma = new PrismaClient(); // ========================================== // USER ROUTES // ========================================== // Get total approved seats for the landing page router.get('/stats', async (req, res) => { try { const approvedCount = await prisma.user.count({ where: { accountStatus: 'APPROVED' } }); res.json({ approvedCount, totalSeats: 100 }); } catch (error) { res.status(500).json({ error: 'Error fetching stats' }); } }); // Get user dashboard data router.get('/dashboard', verifyToken, async (req, res) => { try { const user = await prisma.user.findUnique({ where: { id: req.user.userId }, select: { name: true, accountStatus: true, role: true } }); let classes = []; // Only show class links if they are approved if (user.accountStatus === 'APPROVED') { classes = await prisma.workshopClass.findMany({ orderBy: { dayNumber: 'asc' } }); } res.json({ user, classes }); } catch (error) { res.status(500).json({ error: 'Error fetching dashboard' }); } }); // ========================================== // ADMIN ROUTES // ========================================== // Get all registrations for admin review router.get('/admin/users', verifyToken, isAdmin, async (req, res) => { try { const users = await prisma.user.findMany({ include: { payment: true, discountClaim: true }, orderBy: { createdAt: 'desc' } }); res.json(users); } catch (error) { res.status(500).json({ error: 'Error fetching users' }); } }); // Bulk approve/reject users router.put('/admin/verify-bulk', verifyToken, isAdmin, async (req, res) => { try { const { userIds, status } = req.body; await prisma.user.updateMany({ where: { id: { in: userIds } }, data: { accountStatus: status } }); res.json({ message: `${userIds.length} users updated to ${status}` }); } catch (error) { res.status(500).json({ error: 'Bulk update failed' }); } }); // Approve or Reject a user router.put('/admin/verify/:userId', verifyToken, isAdmin, async (req, res) => { try { const { status } = req.body; // 'APPROVED' or 'REJECTED' const updatedUser = await prisma.user.update({ where: { id: req.params.userId }, data: { accountStatus: status } }); // Optional: Trigger an email here letting them know they are approved! res.json({ message: `User status updated to ${status}`, user: updatedUser }); } catch (error) { res.status(500).json({ error: 'Error updating user status' }); } }); // Update daily class links (Zoom/GMeet) router.put('/admin/class/:dayNumber', verifyToken, isAdmin, async (req, res) => { try { const { title, meetingLink, date } = req.body; const workshopClass = await prisma.workshopClass.upsert({ where: { dayNumber: parseInt(req.params.dayNumber) }, update: { title, meetingLink, date: new Date(date) }, create: { dayNumber: parseInt(req.params.dayNumber), title, meetingLink, date: new Date(date) } }); res.json({ message: 'Class updated successfully', workshopClass }); } catch (error) { res.status(500).json({ error: 'Error updating class' }); } }); module.exports = router;