// @ts-check
/**
* @import {ExpressRequestAuthorized, ExpressResponse} from '../types.js'
*/
/**
* Configuration File API Routes
*
* Defines REST API endpoints for configuration file management.
* Routes are organized by HTTP method and include proper middleware
* for authentication and validation.
*
* @module ConfigRoutes
*/
import express from 'express';
import { checkAdmin } from '../utils/authChecks.js';
import {
uploadConfig,
downloadConfig,
listConfigs,
deleteConfig
} from './configRoute/controller.js';
const configApi = express.Router({ caseSensitive: true });
// Configuration constants
const SUPPORTED_APPS = process.env.apiApps || '';
/**
* @swagger
* tags:
* - name: ApiConfigFile
* description: |
* Configuration file management endpoints.
* Schemas and examples are defined in ./apiConfigFile/apiConfigFile.swagger.yaml.
* Use $ref: './apiConfigFile/apiConfigFile.swagger.yaml#/components/schemas/{SchemaName}' in route blocks.
*/
/**
* @swagger
* /api/config/{app}:
* post:
* summary: Upload and validate a new configuration file
* tags: [Configuration]
* security:
* - AdminAuth: []
* parameters:
* - in: path
* name: app
* required: true
* schema:
* type: string
* description: Application name (must match supported apps)
* requestBody:
* required: true
* content:
* multipart/form-data:
* schema:
* type: object
* properties:
* file:
* type: string
* format: binary
* description: YAML configuration file
* responses:
* 200:
* description: Configuration uploaded and validated successfully
* content:
* application/json:
* schema:
* $ref: './apiConfigFile/apiConfigFile.swagger.yaml#/components/schemas/ConfigUploadResponse'
* 400:
* description: Invalid file or validation error
* 401:
* description: Unauthorized access
* 500:
* description: Server error
*/
// @ts-ignore
configApi.post(`/:app(${SUPPORTED_APPS})`, uploadConfig);
/**
* @swagger
* /api/config/{app}/{UID}:
* get:
* summary: Download a specific configuration file
* tags: [Configuration]
* security:
* - AdminAuth: []
* parameters:
* - in: path
* name: app
* required: true
* schema:
* type: string
* description: Application name
* - in: path
* name: UID
* required: true
* schema:
* type: string
* description: Configuration file UID
* responses:
* 200:
* description: Configuration file download
* content:
* application/octet-stream:
* schema:
* type: string
* format: binary
* 404:
* description: Configuration file not found
* 401:
* description: Unauthorized access
* 500:
* description: Server error
*/
// @ts-ignore
configApi.get(`/:app(${SUPPORTED_APPS})/:UID`, downloadConfig);
/**
* @swagger
* /api/config/{app}:
* get:
* summary: List all configuration files for an application
* tags: [Configuration]
* security:
* - AdminAuth: []
* parameters:
* - in: path
* name: app
* required: true
* schema:
* type: string
* description: Application name
* responses:
* 200:
* description: List of configuration files
* content:
* application/json:
* schema:
* $ref: './apiConfigFile/apiConfigFile.swagger.yaml#/components/schemas/ConfigListResponse'
* 404:
* description: No configurations found
* 401:
* description: Unauthorized access
* 500:
* description: Server error
*/
// @ts-ignore
configApi.get(`/:app(${SUPPORTED_APPS})`, listConfigs);
/**
* @swagger
* /api/config/{app}/{UID}:
* delete:
* summary: Delete a configuration file
* tags: [Configuration]
* security:
* - AdminAuth: []
* parameters:
* - in: path
* name: app
* required: true
* schema:
* type: string
* description: Application name
* - in: path
* name: UID
* required: true
* schema:
* type: string
* description: Configuration file UID to delete
* responses:
* 200:
* description: Configuration file deleted successfully
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* message:
* type: string
* 401:
* description: Unauthorized access
* 500:
* description: Server error
*/
// @ts-ignore
configApi.delete(`/:app(${SUPPORTED_APPS})/:UID`, deleteConfig);
export default configApi;