import { Router, Request, Response } from 'express'; import { authenticate, requireRole } from '../middleware/authMiddleware'; import { firebaseService } from '../services/firebaseService'; import { z } from 'zod'; const router = Router(); // Apply authentication middleware to all routes router.use(authenticate); router.use(requireRole(['ngo_worker'])); // Get user by phone number router.get('/users/:phoneNumber', async (req: Request, res: Response) => { try { const { phoneNumber } = req.params; const user = await firebaseService.getUserByPhone(phoneNumber); if (!user) { return res.status(404).json({ success: false, error: 'User not found', }); } const userHistory = await firebaseService.getUserHistory(user.uid); res.json({ success: true, data: { user, history: userHistory, }, }); } catch (error) { console.error('Error fetching user:', error); res.status(500).json({ success: false, error: 'Failed to fetch user data', }); } }); // Get unassigned cases router.get('/cases/unassigned', async (req: Request, res: Response) => { try { const cases = await firebaseService.getUnassignedCases(); res.json({ success: true, data: cases, }); } catch (error) { console.error('Error fetching unassigned cases:', error); res.status(500).json({ success: false, error: 'Failed to fetch unassigned cases', }); } }); // Assign case to advocate router.post('/cases/:caseId/assign', async (req: Request, res: Response) => { try { const { caseId } = req.params; const { advocateId } = req.body; await firebaseService.assignCase(caseId, advocateId); res.json({ success: true, message: 'Case assigned successfully', }); } catch (error) { console.error('Error assigning case:', error); res.status(500).json({ success: false, error: 'Failed to assign case', }); } }); // Add follow-up question const followUpSchema = z.object({ question: z.string().min(1), caseId: z.string(), }); router.post('/follow-up', async (req: Request, res: Response) => { try { const validatedData = followUpSchema.parse(req.body); await firebaseService.addFollowUp(validatedData.caseId, validatedData.question, req.user!.uid); res.json({ success: true, message: 'Follow-up question added successfully', }); } catch (error) { if (error instanceof z.ZodError) { return res.status(400).json({ success: false, error: 'Validation error', details: error.errors, }); } console.error('Error adding follow-up:', error); res.status(500).json({ success: false, error: 'Failed to add follow-up question', }); } }); export default router;