Spaces:
Sleeping
Sleeping
| const express = require('express'); | |
| const router = express.Router(); | |
| const { authenticateToken } = require('./auth'); | |
| // Require admin helper | |
| const requireAdmin = (req, res, next) => { | |
| const userRole = req.headers['user-role'] || req.body.role; | |
| if (userRole !== 'admin') { | |
| return res.status(403).json({ error: 'Admin access required' }); | |
| } | |
| next(); | |
| }; | |
| router.put('/admin/weeks/:category/:week/visibility', authenticateToken, requireAdmin, async (req, res) => { | |
| try { | |
| const WeekBrief = require('../models/WeekBrief'); | |
| const category = (req.params.category === 'tutorial') ? 'tutorial' : 'weekly-practice'; | |
| const weekNumber = parseInt(req.params.week); | |
| const { hidden } = req.body || {}; | |
| const updated = await WeekBrief.findOneAndUpdate( | |
| { category, weekNumber }, | |
| { hidden: !!hidden }, | |
| { upsert: true, new: true } | |
| ); | |
| res.json({ success: true, week: updated }); | |
| } catch (error) { | |
| console.error('Update week visibility error:', error); | |
| res.status(500).json({ error: 'Failed to update week visibility' }); | |
| } | |
| }); | |
| router.get('/admin/weeks/:category/:week/visibility', authenticateToken, requireAdmin, async (req, res) => { | |
| try { | |
| const WeekBrief = require('../models/WeekBrief'); | |
| const category = (req.params.category === 'tutorial') ? 'tutorial' : 'weekly-practice'; | |
| const weekNumber = parseInt(req.params.week); | |
| const wb = await WeekBrief.findOne({ category, weekNumber }); | |
| res.json({ success: true, week: { category, weekNumber, hidden: !!(wb && wb.hidden) } }); | |
| } catch (error) { | |
| console.error('Get week visibility error:', error); | |
| res.status(500).json({ error: 'Failed to get week visibility' }); | |
| } | |
| }); | |
| module.exports = router; | |