import { Router, Request, Response, NextFunction } from 'express'; import { campaignsService } from './campaigns.service'; import { listModerationQueueSchema, moderateCampaignSchema } from './campaigns.schemas'; import { validate } from '../../../middleware/validate'; import { authenticate } from '../../../middleware/auth.middleware'; import { requireRole } from '../../../middleware/rbac.middleware'; import { INFLUENCE_ROLES } from '../../../utils/roles'; const router = Router(); router.use(authenticate); router.use(requireRole(...INFLUENCE_ROLES)); // GET /api/campaigns/moderation/queue — list moderation queue router.get( '/moderation/queue', validate(listModerationQueueSchema, 'query'), async (req: Request, res: Response, next: NextFunction) => { try { const result = await campaignsService.findModerationQueue(req.query as any); res.json(result); } catch (err) { next(err); } } ); // GET /api/campaigns/moderation/stats — moderation stats router.get( '/moderation/stats', async (_req: Request, res: Response, next: NextFunction) => { try { const stats = await campaignsService.getModerationStats(); res.json(stats); } catch (err) { next(err); } } ); // PATCH /api/campaigns/moderation/:id — moderate a campaign router.patch( '/moderation/:id', validate(moderateCampaignSchema), async (req: Request, res: Response, next: NextFunction) => { try { const id = req.params.id as string; const campaign = await campaignsService.moderateCampaign(id, req.body, req.user!); res.json(campaign); } catch (err) { next(err); } } ); export { router as campaignModerationRouter };