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;