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(['advocate']));
// Get advocate's dashboard data
router.get('/dashboard', async (req: Request, res: Response) => {
try {
const [cases, stats] = await Promise.all([
firebaseService.getAdvocateCases(req.user!.uid),
firebaseService.getAdvocateStats(req.user!.uid),
]);
res.json({
success: true,
data: {
cases,
stats,
},
});
} catch (error) {
console.error('Error fetching dashboard data:', error);
res.status(500).json({
success: false,
error: 'Failed to fetch dashboard data',
});
}
});
// Update case status
const updateStatusSchema = z.object({
status: z.enum(['in_progress', 'resolved']),
});
router.patch('/cases/:caseId/status', async (req: Request, res: Response) => {
try {
const { caseId } = req.params;
const validatedData = updateStatusSchema.parse(req.body);
await firebaseService.updateCaseStatus(caseId, validatedData.status);
res.json({
success: true,
message: 'Case status updated successfully',
});
} catch (error) {
if (error instanceof z.ZodError) {
return res.status(400).json({
success: false,
error: 'Validation error',
details: error.errors,
});
}
console.error('Error updating case status:', error);
res.status(500).json({
success: false,
error: 'Failed to update case status',
});
}
});
// Add transcript to case
const addTranscriptSchema = z.object({
transcript: z.string().min(1),
});
router.post('/cases/:caseId/transcripts', async (req: Request, res: Response) => {
try {
const { caseId } = req.params;
const validatedData = addTranscriptSchema.parse(req.body);
await firebaseService.addTranscript(caseId, validatedData.transcript);
res.json({
success: true,
message: 'Transcript 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 transcript:', error);
res.status(500).json({
success: false,
error: 'Failed to add transcript',
});
}
});
export default router;