perplexity-hackathon-LawMitra / perplexity_hackathon / src / routes / legalRoutes.ts
legalRoutes.ts
Raw
import express from 'express';
import { perplexityService } from '../services/perplexityService';
import { SimplificationService } from '../services/simplificationService';
import { translateIncomingText, translateOutgoingResponse } from '../middleware/translationMiddleware';
import { z } from 'zod';

const router = express.Router();

// Input validation schema
const questionSchema = z.object({
  text: z.string().min(1),
  language: z.string().optional(),
  readingLevel: z.enum(['basic', 'intermediate', 'advanced']).optional().default('intermediate'),
});

// Create controller function
const askLegalQuestion = async (req: express.Request, res: express.Response) => {
  try {
    // Validate input
    const validatedInput = questionSchema.parse(req.body);

    // Get legal answer from Perplexity
    const answer = await perplexityService.askLegalQuestion({
      question: validatedInput.text,
      language: validatedInput.language || 'en',
      location: 'default'
    });

    // Create simplification service instance
    const simplificationService = new SimplificationService();

    // Simplify the answer
    const simplified = await simplificationService.simplifyText(answer.answer);

    res.json({
      text: simplified.text,
      originalText: answer.answer,
      readingLevel: simplified.readingLevel,
      language: validatedInput.language || 'en'
    });
  } catch (error) {
    if (error instanceof z.ZodError) {
      res.status(400).json({ error: 'Invalid input', details: error.errors });
    } else {
      console.error('Error in legal question route:', error);
      res.status(500).json({ error: 'Internal server error' });
    }
  }
};

// Add route with translation middleware
router.post('/ask-legal-question', 
  translateIncomingText,
  translateOutgoingResponse,
  askLegalQuestion
);

export default router;