102 lines
2.9 KiB
TypeScript
102 lines
2.9 KiB
TypeScript
|
|
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;
|