Source: middleware/error-middleware.js

import { ResponseError } from "../error/response-error.js";

/**
 * Middleware untuk menangani error dalam aplikasi.
 *
 * Middleware ini menangani error yang dilemparkan oleh aplikasi. Jika error yang
 * dilemparkan adalah instance dari `ResponseError`, status dan pesan error akan
 * dikirimkan sesuai dengan status yang diberikan. Jika error bukan `ResponseError`,
 * akan mengembalikan respons error dengan status 500 dan pesan error yang disediakan.
 *
 * @param {Error} err - Error yang terjadi selama eksekusi request.
 * @param {express.Request} req - Request objek yang berisi informasi permintaan.
 * @param {express.Response} res - Response objek untuk mengirimkan hasil operasi ke client.
 * @param {express.NextFunction} next - Fungsi untuk melanjutkan eksekusi middleware berikutnya.
 *
 * @returns {void} Mengirimkan respons error dalam bentuk JSON sesuai dengan status error.
 */
const errorMiddleware = (err, req, res, next) => {
  if (!err) {
    next();
    return;
  }

  if (err instanceof ResponseError) {
    res
      .status(err.status)
      .json({
        status: err.status,
        errors: err.message,
      })
      .end();
  } else {
    res
      .status(500)
      .json({
        status: 500,
        errors: err.message,
      })
      .end();
  }
};

export { errorMiddleware };