Source: RouterAddons/addons/controller.js

/**
 * Addon Controller — HTTP Request/Response Handling
 *
 * Extrahiert Request-Parameter, validiert und delegiert an den Service.
 * Fängt Fehler und gibt konsistente HTTP-Antworten zurück.
 *
 * @module AddonController
 */

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

import { errorLogger } from '../../utils/requestLogger.js'
import * as addonService from './service.js'

/**
 * PUT /:app — Addon registrieren/überschreiben (Upsert per name)
 *
 * Auth: makeAuthCheck(['bot']) (wird im Router geprüft)
 *
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 */
export const registerAddon = async (req, res) => {
    try {
        const { app } = req.params
        const { url, name, moduleName, modulePath, remoteAddon, menus, icon, mailLink, listContext, objectTypes, overwrite = false } = req.body
        const UIDorga = req.headers['x-organization']

        if (!url || !name) {
            return res.status(400).json({ success: false, message: 'url und name sind erforderlich' })
        }

        if (!app) {
            return res.status(400).json({ success: false, message: 'app ist erforderlich' })
        }

        if (!UIDorga) {
            return res.status(400).json({ success: false, message: 'x-organization Header ist erforderlich' })
        }

        const result = await addonService.upsertAddon({
            url,
            name,
            moduleName,
            modulePath,
            remoteAddon,
            menus,
            icon,
            mailLink,
            listContext,
            objectTypes,
            UIDorga,
            app,
            overwrite,
        })

        res.json(result)
    } catch (e) {
        errorLogger(e)
        res.status(500).json({ success: false, message: e.message })
    }
}

/**
 * DELETE /:app/:name — Addon entfernen
 *
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 */
export const deleteAddon = async (req, res) => {
    try {
        const { app, name } = req.params
        const UIDorga = req.headers['x-organization']

        if (!name) {
            return res.status(400).json({ success: false, message: 'name ist erforderlich' })
        }

        if (!app) {
            return res.status(400).json({ success: false, message: 'app ist erforderlich' })
        }

        if (!UIDorga) {
            return res.status(400).json({ success: false, message: 'x-organization Header ist erforderlich' })
        }

        const result = await addonService.removeAddon({ name, UIDorga, app })

        if (!result.success) {
            return res.status(404).json(result)
        }

        res.json(result)
    } catch (e) {
        errorLogger(e)
        res.status(500).json({ success: false, message: e.message })
    }
}