/*********************************************************************************************************************************************************************** * File Name: admin.routes.js * Type of Program: Router * Description: Protected routes accessible by admin only — full control. * * Route Map: * Dashboard : GET /api/admin/dashboard * Users : /api/admin/users/* * Groups : /api/admin/groups/* * Assets : /api/admin/assets/* * * Guards: authenticate → requireAdmin() → adminLimiter * * Author: rgrgogu and Kenneth Obsequio (@lash0000) * Date Created: Oct. 6, 2025 * Date Modified: May 5, 2026 * Latest: May 19, 2026 ***********************************************************************************************************************************************************************/ const express = require('express'); const router = express.Router(); const { authenticate } = require('../../middleware/auth.middleware'); const { requireAdmin } = require('../../middleware/rbac.middleware'); const { adminLimiter } = require('../../middleware/rateLimiter.middleware'); const dashboardRoutes = require('./dashboard.routes'); const profileRoutes = require('./profile.routes'); const usersRoutes = require('./users.routes'); const groupsRoutes = require('./groups.routes'); const assetsRoutes = require('./assets.routes'); const coursesRoutes = require('./courses.routes'); const unitsRoutes = require('./units.routes'); const lessonsRoutes = require('./lessons.routes'); const taskRoutes = require('./task.routes'); const tiersRoutes = require('./tiers.routes'); const tierPoliciesRoutes = require('./tier_policies.routes'); const tierCategoriesRoutes = require('./tier_categories.routes'); const categoriesRoutes = require('./categories.routes'); const productsRoutes = require('./products.routes'); const advertisementRoutes = require('./advertisements.routes'); const notificationRoutes = require('./notifications.routes'); const notificationBroadcastRoutes = require('./notificationBroadcasts.routes'); const notificationSettingsRoutes = require('./notificationSettings.routes'); const mediaRoutes = require('./media.routes'); const achievementsRoutes = require('./achievements.routes'); const activityCtrl = require('../../controllers/admin/user_activity.controller'); // ── Guards — applied to ALL admin routes ────────────────────────────────────── router.use(authenticate, requireAdmin(), adminLimiter); // ── Mount ───────────────────────────────────────────────────────────────────── router.use('/dashboard', dashboardRoutes); router.use('/profile', profileRoutes); router.use('/users', usersRoutes); router.use('/groups', groupsRoutes); router.use('/assets', assetsRoutes); router.use('/courses', coursesRoutes); router.use('/units', unitsRoutes); // standalone Unit library (junction revamp) router.use('/lessons', lessonsRoutes); // standalone Lesson library (junction revamp) router.use('/task-lists', taskRoutes); router.use('/tiers/categories', tierCategoriesRoutes); router.use('/tiers', tiersRoutes); router.use('/tier-policies', tierPoliciesRoutes); router.use('/categories', categoriesRoutes); router.use('/products', productsRoutes); router.use('/advertisements', advertisementRoutes); router.use('/notifications', notificationRoutes); router.use('/notification-broadcasts', notificationBroadcastRoutes); router.use('/notification-settings', notificationSettingsRoutes); // Announcements (alias routes for notification broadcasts/settings) router.use('/announcements', notificationBroadcastRoutes); router.use('/announcement-settings', notificationSettingsRoutes); router.use('/media', mediaRoutes); router.use('/achievements', achievementsRoutes); // ── Activity feed — global ──────────────────────────────────────────────────── router.get('/activity', activityCtrl.getActivity); module.exports = router;