/**
* 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 })
}
}