add changes
This commit is contained in:
@@ -2,33 +2,174 @@ const express = require('express');
|
||||
const router = express.Router();
|
||||
const guestController = require('../controllers/guest.controller');
|
||||
const guestMiddleware = require('../middleware/guest.middleware');
|
||||
const { guestSessionLimiter } = require('../middleware/rateLimiter');
|
||||
|
||||
/**
|
||||
* @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
|
||||
* @swagger
|
||||
* /guest/start-session:
|
||||
* post:
|
||||
* summary: Start a new guest session
|
||||
* description: Creates a temporary guest session allowing users to try quizzes without registration
|
||||
* tags: [Guest]
|
||||
* security: []
|
||||
* responses:
|
||||
* 201:
|
||||
* description: Guest session created successfully
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* message:
|
||||
* type: string
|
||||
* example: Guest session created successfully
|
||||
* guestSession:
|
||||
* $ref: '#/components/schemas/GuestSession'
|
||||
* token:
|
||||
* type: string
|
||||
* description: Guest session token for subsequent requests
|
||||
* example: 550e8400-e29b-41d4-a716-446655440000
|
||||
* settings:
|
||||
* type: object
|
||||
* properties:
|
||||
* maxQuizzes:
|
||||
* type: integer
|
||||
* example: 3
|
||||
* expiryHours:
|
||||
* type: integer
|
||||
* example: 24
|
||||
* 500:
|
||||
* description: Server error
|
||||
*
|
||||
* /guest/session/{guestId}:
|
||||
* get:
|
||||
* summary: Get guest session details
|
||||
* tags: [Guest]
|
||||
* security: []
|
||||
* parameters:
|
||||
* - in: path
|
||||
* name: guestId
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* format: uuid
|
||||
* description: Guest session ID
|
||||
* responses:
|
||||
* 200:
|
||||
* description: Guest session retrieved successfully
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* $ref: '#/components/schemas/GuestSession'
|
||||
* 404:
|
||||
* $ref: '#/components/responses/NotFoundError'
|
||||
*
|
||||
* /guest/quiz-limit:
|
||||
* get:
|
||||
* summary: Check guest quiz limit and remaining quizzes
|
||||
* tags: [Guest]
|
||||
* security: []
|
||||
* parameters:
|
||||
* - in: header
|
||||
* name: x-guest-token
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* format: uuid
|
||||
* description: Guest session token
|
||||
* responses:
|
||||
* 200:
|
||||
* description: Quiz limit information retrieved
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* maxQuizzes:
|
||||
* type: integer
|
||||
* example: 3
|
||||
* quizzesCompleted:
|
||||
* type: integer
|
||||
* example: 1
|
||||
* remainingQuizzes:
|
||||
* type: integer
|
||||
* example: 2
|
||||
* limitReached:
|
||||
* type: boolean
|
||||
* example: false
|
||||
* 401:
|
||||
* $ref: '#/components/responses/UnauthorizedError'
|
||||
* 404:
|
||||
* description: Guest session not found or expired
|
||||
*
|
||||
* /guest/convert:
|
||||
* post:
|
||||
* summary: Convert guest session to registered user account
|
||||
* description: Converts guest progress to a new user account, preserving quiz history
|
||||
* tags: [Guest]
|
||||
* security: []
|
||||
* parameters:
|
||||
* - in: header
|
||||
* name: x-guest-token
|
||||
* required: true
|
||||
* schema:
|
||||
* type: string
|
||||
* format: uuid
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - username
|
||||
* - email
|
||||
* - password
|
||||
* properties:
|
||||
* username:
|
||||
* type: string
|
||||
* minLength: 3
|
||||
* maxLength: 50
|
||||
* example: johndoe
|
||||
* email:
|
||||
* type: string
|
||||
* format: email
|
||||
* example: john@example.com
|
||||
* password:
|
||||
* type: string
|
||||
* minLength: 6
|
||||
* example: password123
|
||||
* responses:
|
||||
* 201:
|
||||
* description: Guest converted to user successfully
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* properties:
|
||||
* message:
|
||||
* type: string
|
||||
* example: Guest account converted successfully
|
||||
* user:
|
||||
* $ref: '#/components/schemas/User'
|
||||
* token:
|
||||
* type: string
|
||||
* description: JWT authentication token
|
||||
* sessionsTransferred:
|
||||
* type: integer
|
||||
* example: 2
|
||||
* 400:
|
||||
* $ref: '#/components/responses/ValidationError'
|
||||
* 401:
|
||||
* $ref: '#/components/responses/UnauthorizedError'
|
||||
* 404:
|
||||
* description: Guest session not found or expired
|
||||
* 409:
|
||||
* description: Username or email already exists
|
||||
*/
|
||||
router.post('/start-session', guestSessionLimiter, guestController.startGuestSession);
|
||||
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);
|
||||
router.post('/convert', guestSessionLimiter, guestMiddleware.verifyGuestToken, guestController.convertGuestToUser);
|
||||
|
||||
module.exports = router;
|
||||
|
||||
Reference in New Issue
Block a user