/**
* Bot Language Router
*
* Liefert und pflegt die Labels der Bot-UIs. Die Ablage ist pro **Bot-Repo**
* (z. B. `basic-bots`) und nicht pro Bot — mehrere Bots rendern dieselben
* geteilten UI-Komponenten, also ist ein Text einmal zu pflegen. Zwei Ebenen:
* geteilt (`botLanguages/<repo>/<lang>.json`) und Organisation
* (`botLanguages/<UIDroot>/<repo>/<lang>.json`). Der Point of Truth liegt im
* Bot-Repo und kommt über `template.translations`; die geteilte Ebene wird
* daraus beim Registrieren eines Bots ergänzt.
*
* Bewusst **nicht** unter `/languages`: dort greift in `http-server.js` eine
* Portal-Route vor dem Router-Mount, die pro Organisation nicht unterscheiden
* kann.
*
* @module BotLanguageRouter
*/
// @ts-check
import express from 'express';
import { checkAdmin } from '../utils/authChecks.js';
import { requestUpdateLogger } from '../utils/requestLogger.js';
import * as botLanguageController from './botLanguage/controller.js';
/** @type {express.Router} */
const api = express.Router({ caseSensitive: true });
/**
* @swagger
* /api/botLanguages:
* get:
* summary: Bot-Labels aller Bot-Repos der eigenen Organisation
* description: >
* Liefert die dünne Überschicht (geteilte und Orga-Ebene, Orga gewinnt)
* für alle Bot-Repos, die für die Organisation der Session Übersetzungen
* haben. Wird einmal beim Start der Host-App geladen und im Context
* gehalten.
* tags:
* - Bot Languages
* security:
* - bearerAuth: []
* parameters:
* - in: query
* name: lang
* schema:
* type: string
* example: de
* description: Sprachcode (ISO). Default `de`.
* responses:
* 200:
* description: Repo-Name → Labels
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* lang:
* type: string
* result:
* type: object
* additionalProperties:
* type: object
* additionalProperties:
* type: string
* 400:
* description: Keine Organisation in der Session
* 500:
* description: Server error
*/
// @ts-ignore
api.get('/', botLanguageController.listRepoLanguageSlicesController);
/**
* @swagger
* /api/botLanguages/{repo}:
* get:
* summary: Bot-Labels eines Bot-Repos mit getrennten Ebenen
* description: >
* Liefert geteilte und Orga-Ebene einzeln sowie zusammengeführt. Grundlage
* für den Übersetzungs-Editor.
* tags:
* - Bot Languages
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: repo
* required: true
* schema:
* type: string
* description: Repo-Name (z. B. basic-bots)
* - in: query
* name: lang
* schema:
* type: string
* example: de
* responses:
* 200:
* description: Ebenen und zusammengeführte Labels
* 400:
* description: Ungültiger Repo-Name
* 500:
* description: Server error
*/
// @ts-ignore
api.get('/:repo', botLanguageController.getRepoLanguageController);
/**
* @swagger
* /api/botLanguages/{repo}/{UIDroot}/{lang}:
* put:
* summary: Orga-Ebene eines Bot-Repos schreiben
* description: >
* Upsert der übergebenen Labels, `remove` löscht Keys (Rücksetzen auf die
* geteilte Ebene). Nur fehlende Keys ergänzen ist Aufgabe der
* Registrierung, nicht dieses Endpunkts.
* tags:
* - Bot Languages
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: repo
* required: true
* schema:
* type: string
* - in: path
* name: UIDroot
* required: true
* schema:
* type: string
* - in: path
* name: lang
* required: true
* schema:
* type: string
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* labels:
* type: object
* additionalProperties:
* type: string
* remove:
* type: array
* items:
* type: string
* responses:
* 200:
* description: Geschriebene Labels
* 400:
* description: Ungültige Eingabe
* 500:
* description: Server error
*/
// @ts-ignore
api.put('/:repo/:UIDroot/:lang', requestUpdateLogger, checkAdmin, botLanguageController.putRepoLanguageController);
/**
* @swagger
* /api/botLanguages/{repo}/{lang}:
* put:
* summary: Geteilte Ebene eines Bot-Repos schreiben
* description: >
* Upsert der übergebenen Labels für alle Organisationen, `remove` löscht
* Keys (Rücksetzen auf den Point of Truth des Bot-Repos).
* tags:
* - Bot Languages
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: repo
* required: true
* schema:
* type: string
* - in: path
* name: lang
* required: true
* schema:
* type: string
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* labels:
* type: object
* additionalProperties:
* type: string
* remove:
* type: array
* items:
* type: string
* responses:
* 200:
* description: Geschriebene Labels
* 400:
* description: Ungültige Eingabe
* 500:
* description: Server error
*/
// @ts-ignore
api.put('/:repo/:lang', requestUpdateLogger, checkAdmin, botLanguageController.putRepoLanguageController);
export default api;