routes/auth.router.js

const authController = require("../controllers/auth.controller");
const authJwt = require("../middlewares/auth.jwt.middleware");
const bodyValidation = require("../middlewares/body.validator");
const {
  registerValidator,
  loginValidator,
} = require("../validators/auth.validators");

/** Express router providing user related routes
 * @module routers/authRouter
 * @requires express
 */

/**
 * Express router to mount user related functions on.
 * @type {object}
 * @const
 * @namespace authRouter
 */
const authRouter = require("express").Router();

/**
 * Route for registering a new user.
 * @name /register
 * @function
 * @memberof module:routers/authRouter
 * @param {function} middleware - Middleware function for request body validation using the registerValidator.
 * @param {function} controller - Controller function for user registration.
 */
authRouter
  .route("/register")
  .post(bodyValidation(registerValidator), authController.register);

/**
 * Route for user login.
 * @name /login
 * @function
 * @memberof module:routers/authRouter
 * @param {function} middleware - Middleware function for request body validation using the loginValidator.
 * @param {function} controller - Controller function for user login.
 */
authRouter
  .route("/login")
  .post(bodyValidation(loginValidator), authController.login);

/**
 * Route for getting the current user's information.
 * @name /whoami
 * @function
 * @memberof module:routers/authRouter
 * @param {function} middleware - Middleware function for JWT authentication and authorization.
 * @param {string[]} roles - Array of roles allowed to access this route.
 * @param {function} controller - Controller function for getting user information.
 */
authRouter
  .route("/whoami")
  .get(authJwt(["Admin", "User"]), authController.whoami);

module.exports = authRouter;