import express from 'express'; import { DisputeFlowService } from './dispute-flow.service'; import { requireAuth } from '../middleware/auth.middleware'; import { requireRole } from '../middleware/role.middleware'; const router = express.Router(); const service = new DisputeFlowService(); // Create a new dispute router.post('/disputes', requireAuth, async (req, res) => { try { const dispute = await service.createDispute({ dealId: req.body.dealId, openedByUserId: req.user.id, reasonCode: req.body.reasonCode, summary: req.body.summary, requestedOutcome: req.body.requestedOutcome }); res.status(201).json(dispute); } catch (error) { console.error('Error creating dispute:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Add evidence to a dispute router.post('/disputes/:id/evidence', requireAuth, async (req, res) => { try { await service.addEvidence( parseInt(req.params.id), req.body, req.user.id ); res.status(200).json({ message: 'Evidence added successfully' }); } catch (error) { console.error('Error adding evidence:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Update dispute status router.post('/disputes/:id/status', requireAuth, requireRole(['moderator']), async (req, res) => { try { await service.updateDisputeStatus( parseInt(req.params.id), req.body.newStatus, req.user.id ); res.status(200).json({ message: 'Status updated successfully' }); } catch (error) { console.error('Error updating dispute status:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Resolve a dispute router.post('/disputes/:id/resolve', requireAuth, requireRole(['moderator', 'admin']), async (req, res) => { try { await service.resolveDispute( parseInt(req.params.id), req.body, req.user.id ); res.status(200).json({ message: 'Dispute resolved successfully' }); } catch (error) { console.error('Error resolving dispute:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Get dispute details router.get('/disputes/:id', requireAuth, async (req, res) => { try { const dispute = await service.getDisputeById(parseInt(req.params.id)); if (!dispute) { return res.status(404).json({ error: 'Dispute not found' }); } res.json(dispute); } catch (error) { console.error('Error fetching dispute:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Get dispute events history router.get('/disputes/:id/events', requireAuth, async (req, res) => { try { const events = await service.getDisputeEvents(parseInt(req.params.id)); res.json(events); } catch (error) { console.error('Error fetching dispute events:', error); res.status(500).json({ error: 'Internal server error' }); } }); export default router;