Spaces:
Running
Running
| const express = require('express'); | |
| const Course = require('../models/Course'); | |
| const auth = require('../middleware/auth'); | |
| const router = express.Router(); | |
| // Get all courses | |
| router.get('/', async (req, res) => { | |
| try { | |
| const { category, level, featured } = req.query; | |
| const query = {}; | |
| if (category) query.category = category; | |
| if (level) query.level = level; | |
| if (featured) query.isFeatured = featured === 'true'; | |
| const courses = await Course.find(query) | |
| .populate('instructor', 'username profile.fullName') | |
| .sort({ createdAt: -1 }); | |
| res.json(courses); | |
| } catch (err) { | |
| res.status(500).json({ message: 'Server error' }); | |
| } | |
| }); | |
| // Get single course | |
| router.get('/:id', async (req, res) => { | |
| try { | |
| const course = await Course.findById(req.params.id) | |
| .populate('instructor', 'username profile.fullName profile.bio profile.avatar') | |
| .populate('lessons.quiz'); | |
| if (!course) return res.status(404).json({ message: 'Course not found' }); | |
| res.json(course); | |
| } catch (err) { | |
| res.status(500).json({ message: 'Server error' }); | |
| } | |
| }); | |
| // Create course (admin/instructor only) | |
| router.post('/', auth, async (req, res) => { | |
| try { | |
| if (req.user.role !== 'admin' && req.user.role !== 'instructor') { | |
| return res.status(403).json({ message: 'Not authorized' }); | |
| } | |
| const course = new Course({ | |
| ...req.body, | |
| instructor: req.user.id | |
| }); | |
| await course.save(); | |
| res.status(201).json(course); | |
| } catch (err) { | |
| res.status(500).json({ message: 'Server error' }); | |
| } | |
| }); | |
| module.exports = router; |