Source: RouterEvents/eventJobTemplate/controller.js

/**
 * Event Job Template 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 * as eventJobTemplateService from './service.js';
import { errorLoggerUpdate, errorLoggerRead } from '../../utils/requestLogger.js';

/**
 * Create or update job template
 * Handles PUT /:UIDeventTemplate
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 * @returns {Promise<void>}
 */
export const createOrUpdateJobTemplateController = async (req, res) => {
    try {
        const UIDeventTemplate = UUID2hex(req.params.UIDeventTemplate);
        const requalify = req.query.requalify === '1';

        const result = await eventJobTemplateService.createOrUpdateJobTemplate(
            UIDeventTemplate,
            req.body,
            req.session.root,
            req.session.user,
            req,
            requalify
        );

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

/**
 * Delete job template
 * Handles DELETE /:UID
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 * @returns {Promise<void>}
 */
export const deleteJobTemplateController = async (req, res) => {
    try {
        const UID = UUID2hex(req.params.UID);
        await eventJobTemplateService.deleteJobTemplate(UID, req.session.root);
        res.json({ success: true });
    } catch (error) {
        errorLoggerUpdate(error);
        res.json({ success: false, message: error.message });
    }
};

/**
 * Get all jobs for a function template
 * Handles GET /eventJobs/:UID
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 * @returns {Promise<void>}
 */
export const getEventJobsController = async (req, res) => {
    try {
        const UID = UUID2hex(req.params.UID);
        const UIDUser = UUID2hex(req.session.user);

        const options = {};

        // Parse timestamp if provided
        if (req.query.Timestamp) {
            options.timestamp = req.query.Timestamp;
        }

        // Parse data fields if provided
        if (req.query.Data) {
            let fields = [];
            try {
                fields = JSON.parse(String(req.query.Data));
            } catch (e) {
                fields = [{ path: req.query.Data }];
            }
            options.dataFields = fields;
        }

        // Check if group banner is requested
        if (req.query.groupBanner) {
            options.groupBanner = true;
        }

        const result = await eventJobTemplateService.getEventJobs(UID, UIDUser, options);
        res.json({ success: true, result });
    } catch (error) {
        errorLoggerRead(error);
        res.json({ success: false, message: error.message });
    }
};

/**
 * Get all function template names and UIDs
 * Handles GET /:UID
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 * @returns {Promise<void>}
 */
export const getJobTemplatesController = async (req, res) => {
    try {
        const UID = UUID2hex(req.params.UID);
        const result = await eventJobTemplateService.getJobTemplates(UID);
        res.json({ success: true, result });
    } catch (error) {
        errorLoggerRead(error);
        res.json({ success: false, message: error.message });
    }
};

/**
 * Get all function templates with full data
 * Handles GET /Data/:UID
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 * @returns {Promise<void>}
 */
export const getJobTemplatesWithDataController = async (req, res) => {
    try {
        const UID = UUID2hex(req.params.UID);
        const result = await eventJobTemplateService.getJobTemplatesWithData(UID);
        res.json({ success: true, result });
    } catch (error) {
        errorLoggerRead(error);
        res.json({ success: false, message: error.message });
    }
};