const {Router} = require('express') const router = Router() const userController = require('../controllers/userController'); const electionController = require('../controllers/electionController'); /** * @swagger * /auth/login: * post: * summary: User login * description: Allows users to log in with their username or email and password. * tags: * - Auth * requestBody: * required: true * content: * application/json: * schema: * type: object * properties: * username: * type: string * password: * type: string * remember_me: * type: boolean * example: * username: johndoe * password: password123 * remember_me: true * responses: * '200': * description: User logged in successfully. * content: * application/json: * schema: * type: object * properties: * token: * type: string * example: * token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." * '401': * description: Unauthorized. Indicates that the provided credentials are invalid. * '403': * description: Forbidden. Indicates that the account is inactive. Contact the admin for assistance. * '422': * description: Validation error. Indicates that the request body contains invalid data. */ // Login User router.post('/login', userController.login); /** * @swagger * /auth/logout: * delete: * summary: User logout * description: Logs out the user by invalidating the token associated with the request. * tags: * - Auth * responses: * '200': * description: User logged out successfully. * content: * application/json: * schema: * type: object * properties: * message: * type: string * example: * message: "You are logged out." * '401': * description: Unauthorized. Indicates that the user is not logged in. */ // Logout User router.delete('/logout', userController.logout); /** * @swagger * /auth/user: * get: * summary: Get user information * description: Retrieves information about the authenticated user. * tags: * - Auth * responses: * '200': * description: User information retrieved successfully. * content: * application/json: * schema: * type: object * properties: * user: * $ref: '#/components/schemas/User' * '401': * description: Unauthorized. Indicates that the user is not authenticated or the token is invalid. */ // Data User router.get('/user', userController.getuser); /** * @swagger * /auth/forget-password: * post: * summary: Generate token for password reset * description: Sends a token to the user's email for password reset. * tags: * - Auth * requestBody: * required: true * content: * application/json: * schema: * type: object * properties: * email: * type: string * responses: * '200': * description: Token generated successfully and sent to the user's email. * content: * application/json: * schema: * type: string * description: Token generated for password reset. * '422': * description: Validation error. Indicates that the provided email is not valid. * content: * application/json: * schema: * type: object * properties: * validation: * type: object * description: Error messages for validation failures. * '404': * description: User not found. Indicates that the provided email does not belong to any user. * content: * application/json: * schema: * type: object * properties: * message: * type: string * description: Error message indicating that the user was not found. * '500': * description: Internal server error. Indicates that an unexpected error occurred. * content: * application/json: * schema: * type: object * properties: * message: * type: string * description: Error message indicating the internal server error. */ // Change Password router.post('/changePassword' , userController.forgetPassGenerateToken); /** * @swagger * /auth/changePassword/{token}: * put: * summary: Reset password using token * description: Resets the user's password using the provided token. * tags: * - Auth * parameters: * - in: path * name: token * required: true * description: The token sent to the user's email for password reset. * schema: * type: string * requestBody: * required: true * content: * application/json: * schema: * type: object * properties: * password: * type: string * description: The new password. * responses: * '200': * description: Password reset successful. * content: * application/json: * schema: * type: object * properties: * message: * type: string * description: Success message indicating that the password was reset successfully. * '422': * description: Validation error. Indicates that the provided password does not meet the requirements or the passwords do not match. * content: * application/json: * schema: * type: object * properties: * validation: * type: object * description: Error messages for validation failures. * '500': * description: Internal server error. Indicates that an unexpected error occurred. * content: * application/json: * schema: * type: object * properties: * message: * type: string * description: Error message indicating the internal server error. */ // Change Password :token param router.put('/changePassword/:token' , userController.forgetPassGetToken); ///////// voter /** * @swagger * /auth/voter/login: * post: * summary: Voter login * description: Logs in a voter to participate in an election. * tags: * - Auth * requestBody: * required: true * content: * application/json: * schema: * type: object * properties: * username: * type: string * description: The username of the voter. * password: * type: string * description: The password of the voter. * responses: * '200': * description: Voter login successful. * content: * application/json: * schema: * type: object * properties: * token: * type: string * description: The token associated with the voter. * '422': * description: Validation error. Indicates that the provided username or password is incorrect. * content: * application/json: * schema: * type: object * properties: * validation: * type: object * description: Error message for validation failure. * '500': * description: Internal server error. Indicates that an unexpected error occurred. * content: * application/json: * schema: * type: object * properties: * message: * type: string * description: Error message indicating the internal server error. */ //Voter Login router.post('/voter/login' , electionController.voterLogin); /** * @swagger * /auth/voter/user: * get: * summary: Get voter user * description: Retrieves the details of the logged-in voter. * tags: * - Auth * security: * - BearerAuth: [] * responses: * '200': * description: Voter user details retrieved successfully. * content: * application/json: * schema: * type: object * properties: * user: * type: object * description: Details of the logged-in voter. * '422': * description: Validation error. Indicates that the token is invalid or the voter does not exist. * content: * application/json: * schema: * type: object * properties: * validation: * type: object * description: Error message for validation failure. * '500': * description: Internal server error. Indicates that an unexpected error occurred. * content: * application/json: * schema: * type: object * properties: * message: * type: string * description: Error message indicating the internal server error. */ // user Voter Data router.get('/voter/user' , electionController.getVoterUser); module.exports = router