controllers/course-material.controller.js

const { Request, Response } = require("express");
const materialService = require("../services/material.service");
const { ErrorResponse } = require("../responses/error.response");
const {
  SuccessArrayResponse,
  SuccessResponse,
} = require("../responses/success.response");

/**
 * Controller for material-related operations.
 * @module controllers/materialController
 */
module.exports = {
  /**
   * Get all materials with pagination.
   * @memberof module:controllers/materialController
   * @param {Request} req - The request object.
   * @param {Response} res - The response object.
   * @returns {Promise<void>}
   */
  getAll: async (req, res) => {
    const { offset, limit } = req.pagination;
    const { orders, count } = await materialService.getAll(offset, limit);
    res.status(200).json(new SuccessArrayResponse(orders, count));
  },

  /**
   * Get an material by its ID.
   * @memberof module:controllers/materialController
   * @param {Request} req - The request object.
   * @param {Response} res - The response object.
   * @returns {Promise<void>}
   */
  getById: async (req, res) => {
    const { id } = req.params;
    const order = await materialService.getById(id);
    if (!order) {
      res.sendStatus(404);
      return;
    }
    res.status(200).json(new SuccessResponse(order));
  },

  /**
   * Create a new course material.
   * @memberof module:controllers/materialController
   * @param {Request} req - The request object.
   * @param {Response} res - The response object.
   * @returns {Promise<void>}
   */
  create: async (req, res) => {
    console.log("CREATE ORDER CONTROLLER");
    const data = req.body;
    const courseId = req.user.id;
    const order = await materialService.create(courseId, data);
    res.location("/order/" + order.id);
    res.status(201).json(new SuccessResponse(order, 201));
  },

  /**
   * Update a course material.
   * @memberof module:controllers/materialController
   * @param {Request} req - The request object.
   * @param {Response} res - The response object.
   * @returns {Promise<void>}
   */
  update: async (req, res) => {
    const { id } = req.params;
    const data = req.body;
    const updated = await materialService.update(id, data);
    if (!updated) {
      res.sendStatus(404);
      return;
    }
    res.sendStatus(204);
  },

  /**
   * Delete a course material
   * @memberof module:controllers/materialController
   * @param {Request} req - The request object.
   * @param {Response} res - The response object.
   * @returns {Promise<void>}
   */
  delete: async (req, res) => {
    const { id } = req.params;
    const deleted = await materialService.delete(id);
    if (!deleted) {
      res.sendStatus(404);
      return;
    }
    res.sendStatus(204);
  },
};