add changes
This commit is contained in:
35
backend/routes/admin.routes.js
Normal file
35
backend/routes/admin.routes.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const questionController = require('../controllers/question.controller');
|
||||
const { verifyToken, isAdmin } = require('../middleware/auth.middleware');
|
||||
|
||||
/**
|
||||
* @route POST /api/admin/questions
|
||||
* @desc Create a new question (Admin only)
|
||||
* @access Admin
|
||||
* @body {
|
||||
* questionText, questionType, options, correctAnswer,
|
||||
* difficulty, points, explanation, categoryId, tags, keywords
|
||||
* }
|
||||
*/
|
||||
router.post('/questions', verifyToken, isAdmin, questionController.createQuestion);
|
||||
|
||||
/**
|
||||
* @route PUT /api/admin/questions/:id
|
||||
* @desc Update a question (Admin only)
|
||||
* @access Admin
|
||||
* @body {
|
||||
* questionText?, questionType?, options?, correctAnswer?,
|
||||
* difficulty?, points?, explanation?, categoryId?, tags?, keywords?, isActive?
|
||||
* }
|
||||
*/
|
||||
router.put('/questions/:id', verifyToken, isAdmin, questionController.updateQuestion);
|
||||
|
||||
/**
|
||||
* @route DELETE /api/admin/questions/:id
|
||||
* @desc Delete a question - soft delete (Admin only)
|
||||
* @access Admin
|
||||
*/
|
||||
router.delete('/questions/:id', verifyToken, isAdmin, questionController.deleteQuestion);
|
||||
|
||||
module.exports = router;
|
||||
35
backend/routes/auth.routes.js
Normal file
35
backend/routes/auth.routes.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const authController = require('../controllers/auth.controller');
|
||||
const { validateRegistration, validateLogin } = require('../middleware/validation.middleware');
|
||||
const { verifyToken } = require('../middleware/auth.middleware');
|
||||
|
||||
/**
|
||||
* @route POST /api/auth/register
|
||||
* @desc Register a new user
|
||||
* @access Public
|
||||
*/
|
||||
router.post('/register', validateRegistration, authController.register);
|
||||
|
||||
/**
|
||||
* @route POST /api/auth/login
|
||||
* @desc Login user
|
||||
* @access Public
|
||||
*/
|
||||
router.post('/login', validateLogin, authController.login);
|
||||
|
||||
/**
|
||||
* @route POST /api/auth/logout
|
||||
* @desc Logout user (client-side token removal)
|
||||
* @access Public
|
||||
*/
|
||||
router.post('/logout', authController.logout);
|
||||
|
||||
/**
|
||||
* @route GET /api/auth/verify
|
||||
* @desc Verify JWT token and return user info
|
||||
* @access Private
|
||||
*/
|
||||
router.get('/verify', verifyToken, authController.verifyToken);
|
||||
|
||||
module.exports = router;
|
||||
41
backend/routes/category.routes.js
Normal file
41
backend/routes/category.routes.js
Normal file
@@ -0,0 +1,41 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const categoryController = require('../controllers/category.controller');
|
||||
const authMiddleware = require('../middleware/auth.middleware');
|
||||
|
||||
/**
|
||||
* @route GET /api/categories
|
||||
* @desc Get all active categories (guest sees only guest-accessible, auth sees all)
|
||||
* @access Public (optional auth)
|
||||
*/
|
||||
router.get('/', authMiddleware.optionalAuth, categoryController.getAllCategories);
|
||||
|
||||
/**
|
||||
* @route GET /api/categories/:id
|
||||
* @desc Get category details with question preview and stats
|
||||
* @access Public (optional auth, some categories require auth)
|
||||
*/
|
||||
router.get('/:id', authMiddleware.optionalAuth, categoryController.getCategoryById);
|
||||
|
||||
/**
|
||||
* @route POST /api/categories
|
||||
* @desc Create new category
|
||||
* @access Private/Admin
|
||||
*/
|
||||
router.post('/', authMiddleware.verifyToken, authMiddleware.isAdmin, categoryController.createCategory);
|
||||
|
||||
/**
|
||||
* @route PUT /api/categories/:id
|
||||
* @desc Update category
|
||||
* @access Private/Admin
|
||||
*/
|
||||
router.put('/:id', authMiddleware.verifyToken, authMiddleware.isAdmin, categoryController.updateCategory);
|
||||
|
||||
/**
|
||||
* @route DELETE /api/categories/:id
|
||||
* @desc Delete category (soft delete)
|
||||
* @access Private/Admin
|
||||
*/
|
||||
router.delete('/:id', authMiddleware.verifyToken, authMiddleware.isAdmin, categoryController.deleteCategory);
|
||||
|
||||
module.exports = router;
|
||||
34
backend/routes/guest.routes.js
Normal file
34
backend/routes/guest.routes.js
Normal file
@@ -0,0 +1,34 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const guestController = require('../controllers/guest.controller');
|
||||
const guestMiddleware = require('../middleware/guest.middleware');
|
||||
|
||||
/**
|
||||
* @route POST /api/guest/start-session
|
||||
* @desc Start a new guest session
|
||||
* @access Public
|
||||
*/
|
||||
router.post('/start-session', guestController.startGuestSession);
|
||||
|
||||
/**
|
||||
* @route GET /api/guest/session/:guestId
|
||||
* @desc Get guest session details
|
||||
* @access Public
|
||||
*/
|
||||
router.get('/session/:guestId', guestController.getGuestSession);
|
||||
|
||||
/**
|
||||
* @route GET /api/guest/quiz-limit
|
||||
* @desc Check guest quiz limit and remaining quizzes
|
||||
* @access Protected (Guest Token Required)
|
||||
*/
|
||||
router.get('/quiz-limit', guestMiddleware.verifyGuestToken, guestController.checkQuizLimit);
|
||||
|
||||
/**
|
||||
* @route POST /api/guest/convert
|
||||
* @desc Convert guest session to registered user account
|
||||
* @access Protected (Guest Token Required)
|
||||
*/
|
||||
router.post('/convert', guestMiddleware.verifyGuestToken, guestController.convertGuestToUser);
|
||||
|
||||
module.exports = router;
|
||||
35
backend/routes/question.routes.js
Normal file
35
backend/routes/question.routes.js
Normal file
@@ -0,0 +1,35 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const questionController = require('../controllers/question.controller');
|
||||
const { optionalAuth } = require('../middleware/auth.middleware');
|
||||
|
||||
/**
|
||||
* @route GET /api/questions/search
|
||||
* @desc Search questions using full-text search
|
||||
* @access Public (with optional auth for more questions)
|
||||
* @query q - Search query (required)
|
||||
* @query category - Filter by category UUID (optional)
|
||||
* @query difficulty - Filter by difficulty (easy, medium, hard) (optional)
|
||||
* @query limit - Number of results per page (default: 20, max: 100)
|
||||
* @query page - Page number (default: 1)
|
||||
*/
|
||||
router.get('/search', optionalAuth, questionController.searchQuestions);
|
||||
|
||||
/**
|
||||
* @route GET /api/questions/category/:categoryId
|
||||
* @desc Get questions by category with filtering
|
||||
* @access Public (with optional auth for more questions)
|
||||
* @query difficulty - Filter by difficulty (easy, medium, hard)
|
||||
* @query limit - Number of questions to return (default: 10, max: 50)
|
||||
* @query random - Boolean to randomize questions (default: false)
|
||||
*/
|
||||
router.get('/category/:categoryId', optionalAuth, questionController.getQuestionsByCategory);
|
||||
|
||||
/**
|
||||
* @route GET /api/questions/:id
|
||||
* @desc Get single question by ID
|
||||
* @access Public (with optional auth for auth-only questions)
|
||||
*/
|
||||
router.get('/:id', optionalAuth, questionController.getQuestionById);
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user