Description
As user-generated content (course descriptions, forum posts, assignment submissions) grows, we need a moderation system where flagged or new content can be reviewed, approved, or rejected by moderators before being publicly visible.
Definition of Done
- Content types eligible for moderation: course descriptions, user-submitted resources, discussion posts, reviews
- Auto-flagging based on configurable keyword/pattern blocklist
- User flagging: any authenticated user can "Report" content with a reason
- Moderation queue endpoint:
GET /api/admin/moderation/queue with filters by status (pending, approved, rejected), content type, date range
- Moderation actions: approve (content becomes visible), reject with reason (content hidden, author notified), request revision (author can resubmit)
- Moderation history logged in audit trail (see related audit logging issue)
- Author receives notification (in-app + optional email) when content is moderated
- Batch moderation: select multiple items and approve/reject in bulk
- Role-based access: only users with
moderator or admin role can access moderation endpoints
Files to Modify
frontend/src/app/admin/content/moderation/page.tsx
- NEW:
backend/src/models/ModerationFlag.ts
- NEW:
backend/src/services/moderationService.ts
- NEW:
backend/src/routes/admin/moderation.ts
- NEW:
backend/src/services/__tests__/moderationService.test.ts
backend/src/services/contentService.ts (integrate moderation check on content visibility)
backend/src/middleware/rbac.ts (add moderator role checks)
backend/migrations/ (new migration for moderation tables)
backend/src/controllers/notificationController.ts (send moderation result notifications)
Acceptance Criteria
Description
As user-generated content (course descriptions, forum posts, assignment submissions) grows, we need a moderation system where flagged or new content can be reviewed, approved, or rejected by moderators before being publicly visible.
Definition of Done
GET /api/admin/moderation/queuewith filters by status (pending, approved, rejected), content type, date rangemoderatororadminrole can access moderation endpointsFiles to Modify
frontend/src/app/admin/content/moderation/page.tsxbackend/src/models/ModerationFlag.tsbackend/src/services/moderationService.tsbackend/src/routes/admin/moderation.tsbackend/src/services/__tests__/moderationService.test.tsbackend/src/services/contentService.ts(integrate moderation check on content visibility)backend/src/middleware/rbac.ts(add moderator role checks)backend/migrations/(new migration for moderation tables)backend/src/controllers/notificationController.ts(send moderation result notifications)Acceptance Criteria