import Joi from 'joi'; import moderationService from '../services/moderationService.js'; const moderationController = { async createReport(req, res) { const schema = Joi.object({ targetType: Joi.string().valid('forum_message').required(), targetId: Joi.number().integer().min(1).required(), reason: Joi.string().trim().min(3).max(120).required(), details: Joi.string().allow('').max(2000).optional() }); const { error, value } = schema.validate(req.body || {}); if (error) { return res.status(400).json({ error: error.details[0].message }); } try { const { userid: userId } = req.headers; const result = await moderationService.createReport(userId, value); return res.status(201).json(result); } catch (err) { console.error('Error in createReport:', err); return res.status(400).json({ error: err.message }); } }, async listReports(req, res) { try { const { userid: userId } = req.headers; const result = await moderationService.listReports(userId, req.query || {}); return res.status(200).json(result); } catch (err) { console.error('Error in listReports:', err); return res.status(400).json({ error: err.message }); } }, async updateReportStatus(req, res) { const schema = Joi.object({ status: Joi.string().valid('open', 'in_review', 'resolved', 'rejected').required(), reviewerNote: Joi.string().allow('').max(2000).optional() }); const { error, value } = schema.validate(req.body || {}); if (error) { return res.status(400).json({ error: error.details[0].message }); } try { const { userid: userId } = req.headers; const result = await moderationService.updateReportStatus(userId, req.params.reportId, value); return res.status(200).json(result); } catch (err) { console.error('Error in updateReportStatus:', err); return res.status(400).json({ error: err.message }); } } }; export default moderationController;