add changes

This commit is contained in:
AD2025
2025-11-12 23:06:27 +02:00
parent c664d0a341
commit ec6534fcc2
42 changed files with 11854 additions and 299 deletions

View File

@@ -2,40 +2,141 @@ const express = require('express');
const router = express.Router();
const categoryController = require('../controllers/category.controller');
const authMiddleware = require('../middleware/auth.middleware');
const { cacheCategories, cacheSingleCategory, invalidateCacheMiddleware, invalidateCache } = require('../middleware/cache');
/**
* @route GET /api/categories
* @desc Get all active categories (guest sees only guest-accessible, auth sees all)
* @access Public (optional auth)
* @swagger
* /categories:
* get:
* summary: Get all active categories
* description: Guest users see only guest-accessible categories, authenticated users see all
* tags: [Categories]
* security: []
* responses:
* 200:
* description: Categories retrieved successfully
* content:
* application/json:
* schema:
* type: array
* items:
* $ref: '#/components/schemas/Category'
* 500:
* description: Server error
* post:
* summary: Create new category
* tags: [Categories]
* security:
* - bearerAuth: []
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - name
* properties:
* name:
* type: string
* example: JavaScript Fundamentals
* description:
* type: string
* example: Core JavaScript concepts and syntax
* requiresAuth:
* type: boolean
* default: false
* isActive:
* type: boolean
* default: true
* responses:
* 201:
* description: Category created successfully
* 401:
* $ref: '#/components/responses/UnauthorizedError'
* 403:
* $ref: '#/components/responses/ForbiddenError'
*
* /categories/{id}:
* get:
* summary: Get category details with question preview and stats
* tags: [Categories]
* security: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: Category ID
* responses:
* 200:
* description: Category details retrieved successfully
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/Category'
* 404:
* $ref: '#/components/responses/NotFoundError'
* put:
* summary: Update category
* tags: [Categories]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* requestBody:
* content:
* application/json:
* schema:
* type: object
* properties:
* name:
* type: string
* description:
* type: string
* requiresAuth:
* type: boolean
* isActive:
* type: boolean
* responses:
* 200:
* description: Category updated successfully
* 401:
* $ref: '#/components/responses/UnauthorizedError'
* 403:
* $ref: '#/components/responses/ForbiddenError'
* 404:
* $ref: '#/components/responses/NotFoundError'
* delete:
* summary: Delete category (soft delete)
* tags: [Categories]
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* responses:
* 200:
* description: Category deleted successfully
* 401:
* $ref: '#/components/responses/UnauthorizedError'
* 403:
* $ref: '#/components/responses/ForbiddenError'
* 404:
* $ref: '#/components/responses/NotFoundError'
*/
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);
router.get('/', authMiddleware.optionalAuth, cacheCategories, categoryController.getAllCategories);
router.get('/:id', authMiddleware.optionalAuth, cacheSingleCategory, categoryController.getCategoryById);
router.post('/', authMiddleware.verifyToken, authMiddleware.isAdmin, invalidateCacheMiddleware(() => invalidateCache.category()), categoryController.createCategory);
router.put('/:id', authMiddleware.verifyToken, authMiddleware.isAdmin, invalidateCacheMiddleware((req) => invalidateCache.category(req.params.id)), categoryController.updateCategory);
router.delete('/:id', authMiddleware.verifyToken, authMiddleware.isAdmin, invalidateCacheMiddleware((req) => invalidateCache.category(req.params.id)), categoryController.deleteCategory);
module.exports = router;