Source: RouterEvents/eventGroup/controller.js

/**
 * Event Group Controller Layer
 * Handles HTTP request/response and delegates to service layer
 */

// @ts-check
/**
 * @import {ExpressRequestAuthorized, ExpressResponse} from './../../types.js'
 */

import { UUID2hex } from '@commtool/sql-query';
import { paginateList } from '../../utils/paginateList.js';
import * as eventGroupService from './service.js';
import { errorLoggerUpdate, errorLoggerRead } from '../../utils/requestLogger.js';

/**
 * Add group to event controller
 * Handles PUT /:UIDevent
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 * @returns {Promise<void>}
 */
export const addGroupToEventController = async (req, res) => {
    try {
        const UIDevent = UUID2hex(req.params.UIDevent);

        if (!req.body.UID) {
            res.status(300).json({
                success: false,
                message: 'UID parameter for the group missing in body'
            });
            return;
        }

        const result = await eventGroupService.addEventGroup(
            UIDevent,
            req.body.UID,
            req.session,
            req
        );

        res.json({ success: true, result });
    } catch (error) {
        errorLoggerUpdate(error);
        res.status(300).json({ success: false, message: error.message });
    }
};

/**
 * Delete group from event controller
 * Handles DELETE /:UIDevent/:UIDgroup
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 * @returns {Promise<void>}
 */
export const deleteGroupFromEventController = async (req, res) => {
    try {
        const UIDevent = UUID2hex(req.params.UIDevent);
        const UIDgroup = UUID2hex(req.params.UIDgroup);

        await eventGroupService.deleteEventGroup(UIDevent, UIDgroup, req);

        res.json({ success: true });
    } catch (error) {
        errorLoggerUpdate(error);
        res.status(300).json({ success: false, message: error.message });
    }
};

/**
 * List event groups controller with pagination support
 * Handles GET /:UID
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 * @param {Function} next
 * @returns {Promise<void>}
 */
export const listEventGroupsController = async (req, res, next) => {
    try {
        // Check if pagination is requested
        if (req.query.__page) {
            const paginatedResult = await paginateList(req, eventGroupService.getGroupsListing);
            res.json(paginatedResult);
            return;
        }

        // Normal listing without pagination
        const result = await eventGroupService.getGroupsListing(req);
        res.json({ success: true, result });
    } catch (error) {
        errorLoggerRead(error);
        res.status(500).json({ success: false, message: error.message });
    }
};