add changes

This commit is contained in:
AD2025
2025-11-11 00:25:50 +02:00
commit e3ca132c5e
86 changed files with 22238 additions and 0 deletions

View 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;

View 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;

View 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;

View 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;

View 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;