import Joi from 'joi'; import moderationService from '../services/moderationService.js'; const moderationController = { async createReport(req, res) { const allowedTargetTypes = [ 'forum_message', 'gallery_image', 'guestbook_entry', 'one_to_one_message', 'diary_entry', 'user_profile', 'blog', 'blog_post' ]; const schema = Joi.object({ targetType: Joi.string().valid(...allowedTargetTypes).required(), targetId: Joi.number().integer().min(1).optional(), targetRef: Joi.string().trim().max(255).allow('').optional(), reason: Joi.string().trim().min(3).max(120).required(), details: Joi.string().allow('').max(2000).optional() }).or('targetId', 'targetRef'); 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 }); } }, async getOpenReportCount(req, res) { try { const { userid: userId } = req.headers; const result = await moderationService.getOpenReportCount(userId); return res.status(200).json(result); } catch (err) { console.error('Error in getOpenReportCount:', err); return res.status(400).json({ error: err.message }); } } }; export default moderationController;