controllers/auth.controller.js

const { Request, Response } = require("express");
const authService = require("../services/auth.service");
const { ErrorResponse } = require("../responses/error.response");
const { SuccessResponse } = require("../responses/success.response");
const jwt = require("../utils/jwt");

/**
 * Controller for authentication-related operations.
 * @module controllers/authController
 */
module.exports = {
  /**
   * Register a new user.
   * @memberof module:controllers/authController
   * @param {Request} req - The request object.
   * @param {Response} res - The response object.
   * @returns {Promise<void>}
   */
  register: async (req, res) => {
    const data = req.body;
    const user = await authService.register(data);
    if (!user) {
      res.sendStatus(400);
      return;
    }
    const token = await jwt.generate(user);
    res.status(201).json(new SuccessResponse({ token, user }, 201));
  },
  /**
   * Login a user.
   * @memberof module:controllers/authController
   * @param {Request} req - The request object.
   * @param {Response} res - The response object.
   * @returns {Promise<void>}
   */
  login: async (req, res) => {
    console.log("Login");
    const { email, password } = req.body;
    const user = await authService.login(email, password);
    if (!user) {
      res.status(400).json(new ErrorResponse("Bad credentials"));
      return;
    }
    const token = await jwt.generate(user);
    res.status(200).json(new SuccessResponse({ token, user }));
  },

  /**
   * Get the user's information.
   * @memberof module:controllers/authController
   * @param {Request} req - The request object.
   * @param {Response} res - The response object.
   * @returns {void}
   */
  whoami: async (req, res) => {
    res.status(200).json(req.user);
  },
};