import express from 'express'; import cors from 'cors'; import chalk from 'chalk'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import fs from 'fs/promises'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const app = express(); app.use(cors()); app.use(express.json()); // Load mock data const dataDir = join(__dirname, '../data'); const [users, cases, questions] = await Promise.all([ fs.readFile(join(dataDir, 'users.json'), 'utf-8').then(JSON.parse), fs.readFile(join(dataDir, 'cases.json'), 'utf-8').then(JSON.parse), fs.readFile(join(dataDir, 'questions.json'), 'utf-8').then(JSON.parse), ]); // Auth endpoints app.post('/api/auth/login', (req, res) => { const { email } = req.body; const user = users.users.find(u => u.email === email); if (!user) { return res.status(401).json({ error: 'Invalid credentials' }); } res.json({ token: 'mock-token', user: { uid: user.uid, name: user.name, email: user.email, role: user.role, }, }); }); // NGO worker endpoints app.get('/api/ngo/users/:phoneNumber', (req, res) => { const user = users.users.find(u => u.phoneNumber === req.params.phoneNumber); if (!user) { return res.status(404).json({ error: 'User not found' }); } const userCases = cases.cases.filter(c => c.userId === user.uid); const userQuestions = questions.questions.filter(q => q.userId === user.uid); res.json({ success: true, data: { user, history: { cases: userCases, questions: userQuestions, }, }, }); }); // Advocate endpoints app.get('/api/advocate/dashboard', (req, res) => { const advocateId = req.headers.authorization?.split(' ')[1] || 'adv1'; const advocateCases = cases.cases.filter(c => c.advocateId === advocateId); const stats = { totalCases: advocateCases.length, activeCases: advocateCases.filter(c => c.status === 'in_progress').length, resolvedCases: advocateCases.filter(c => c.status === 'resolved').length, }; res.json({ success: true, data: { cases: advocateCases, stats, }, }); }); // Legal chat endpoints app.post('/api/legal/ask-legal-question', (req, res) => { const { text, language = 'en' } = req.body; // Simulate processing delay setTimeout(() => { const mockResponse = { text: `Here is a legal response to your question: "${text}"`, language, timestamp: new Date().toISOString(), }; res.json(mockResponse); }, 1000); }); const port = process.env.PORT || 3001; app.listen(port, () => { console.log(chalk.green(`Demo server running on port ${port}`)); console.log(chalk.blue('Available mock data:')); console.log(chalk.yellow('- Users:'), users.users.length); console.log(chalk.yellow('- Cases:'), cases.cases.length); console.log(chalk.yellow('- Questions:'), questions.questions.length); });