import { createAnnouncementValidation } from "../validation/joi.js"; import { handleError } from "./controllerUtils.js"; const SERVICE_NAME = "announcementController"; /** * Controller for managing announcements in the system. * This class handles the creation of new announcements. * * @class AnnouncementController */ class AnnouncementController { constructor(db, stringService) { this.db = db; this.stringService = stringService; this.createAnnouncement = this.createAnnouncement.bind(this); this.getAnnouncement = this.getAnnouncement.bind(this); } /** * Handles the creation of a new announcement. * * @async * @param {Object} req - The request object, containing the announcement data in the body. * @param {Object} res - The response object used to send the result back to the client. * @param {Function} next - The next middleware function in the stack for error handling. * * @returns {Promise} A promise that resolves once the response is sent. */ createAnnouncement = async (req, res, next) => { try { await createAnnouncementValidation.validateAsync(req.body); } catch (error) { return next(handleError(error, SERVICE_NAME)); // Handle Joi validation errors } const { title, message } = req.body; try { const announcementData = { title: title.trim(), message: message.trim(), userId: req.user._id, }; const newAnnouncement = await this.db.createAnnouncement(announcementData); return res.success({ msg: this.stringService.createAnnouncement, data: newAnnouncement, }); } catch (error) { next(handleError(error, SERVICE_NAME, "createAnnouncement")); } }; /** * Handles retrieving announcements with pagination. * * @async * @param {Object} res - The response object used to send the result back to the client. * - `data`: The list of announcements to be sent back to the client. * - `msg`: A message about the success of the request. * @param {Function} next - The next middleware function in the stack for error handling. */ getAnnouncement = async (req, res, next) => { try { const allAnnouncements = await this.db.getAnnouncements(); return res.success({ msg: this.stringService.getAnnouncement, data: allAnnouncements, }); } catch (error) { next(handleError(error, SERVICE_NAME, "getAnnouncement")); } }; } export default AnnouncementController;