Source: RouterEvents/eventPersons/controller.js

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

import * as eventPersonsService from './service.js';
import { errorLoggerUpdate, errorLoggerRead } from '../../utils/requestLogger.js';
import { UUID2hex } from '@commtool/sql-query';
import { isAdmin, isObjectAdmin } from '../../utils/authChecks.js';

/**
 * Controller for updating an event list
 * @param {ExpressRequestAuthorized} req 
 * @param {ExpressResponse} res 
 */
export const updateEventListController = async (req, res) => {
    try {
        const listUID = UUID2hex(req.params.UID);
        
        // Get the event where this list belongs to
        const events = await eventPersonsService.getEventForList(listUID);
        
        // Check authorization
        if (!isAdmin(req.session) && (events.length === 0 || !await isObjectAdmin(req, events[0].UID))) {
            res.json({ message: 'user not authorized', success: false });
            return;
        }
        
        // Update the list
        const result = await eventPersonsService.updateEventList(req, listUID, events[0].Type);
        res.json(result);
    } catch (error) {
        errorLoggerUpdate({ error, location: 'eventPersons/controller.updateEventListController' });
        res.status(500).json({ success: false, message: error.message });
    }
};

/**
 * Controller for getting event lists with participants
 * @param {ExpressRequestAuthorized} req 
 * @param {ExpressResponse} res 
 */
export const getEventListsController = async (req, res) => {
    try {
        // Validate UID parameter
        if (req.params.UID === 'undefined') {
            res.json({ success: false, message: 'supplied undefined UID' });
            return;
        }
        
        const eventUID = UUID2hex(req.params.UID);
        
        if (!eventUID) {
            res.json({ success: false, message: 'supplied invalid UID' });
            return;
        }
        
        const admin = await isAdmin(req.session);
        const userUID = UUID2hex(req.session.user);
        
        // Get lists with participants
        const result = await eventPersonsService.getEventLists(
            eventUID,
            userUID,
            admin,
            req.query,
            req.session
        );
        
        res.json({ success: true, result });
    } catch (error) {
        errorLoggerRead({ error, location: 'eventPersons/controller.getEventListsController' });
        res.status(500).json({ success: false, message: error.message });
    }
};