import { Router, Request, Response } from 'express';
import { z } from 'zod';
import { documentService } from '../services/documentService';
const router = Router();
// Input validation schema
const documentRequestSchema = z.object({
type: z.enum(['fir', 'rent_agreement', 'affidavit']),
details: z.record(z.string(), z.any()),
language: z.string().min(2).max(10),
});
router.post('/generate-document', async (req: Request, res: Response) => {
try {
// Validate input
const validatedData = documentRequestSchema.parse(req.body);
// Generate document
const pdfBuffer = await documentService.generateDocument({
type: validatedData.type,
details: validatedData.details,
language: validatedData.language,
});
// Set response headers for PDF download
res.setHeader('Content-Type', 'application/pdf');
res.setHeader(
'Content-Disposition',
`attachment; filename=${validatedData.type}_${Date.now()}.pdf`
);
// Send the PDF
res.send(pdfBuffer);
} catch (error) {
if (error instanceof z.ZodError) {
return res.status(400).json({
success: false,
error: 'Validation error',
details: error.errors,
});
}
console.error('Error generating document:', error);
res.status(500).json({
success: false,
error: 'Failed to generate document',
});
}
});
// Get available fields for a template
router.get('/template-fields/:type', async (req: Request, res: Response) => {
try {
const { type } = req.params;
const fields = await documentService.getTemplateFields(type);
res.json({
success: true,
fields,
});
} catch (error) {
console.error('Error getting template fields:', error);
res.status(500).json({
success: false,
error: 'Failed to get template fields',
});
}
});
export default router;