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);
});