config_routes.py 1.44 KB
from __future__ import annotations

from flask import Blueprint, jsonify, request
from loguru import logger

from . import config_admin

config_bp = Blueprint("config", __name__, url_prefix="/api/config")


@config_bp.get("")
def get_config():
    """Expose selected configuration values to the frontend."""
    try:
        config_values = config_admin.read_config_values()
        return jsonify({"success": True, "config": config_values})
    except Exception as exc:
        logger.exception("读取配置失败")
        return jsonify({"success": False, "message": f"读取配置失败: {exc}"}), 500


@config_bp.post("")
def update_config():
    """Update configuration values and persist them to config storage."""
    payload = request.get_json(silent=True) or {}
    if not isinstance(payload, dict) or not payload:
        return jsonify({"success": False, "message": "请求体不能为空"}), 400

    updates = config_admin.filter_config_updates(payload, allowed_keys=config_admin.CONFIG_KEYS)
    if not updates:
        return jsonify({"success": False, "message": "没有可更新的配置项"}), 400

    try:
        config_admin.write_config_values(updates)
        updated_config = config_admin.read_config_values()
        return jsonify({"success": True, "config": updated_config})
    except Exception as exc:
        logger.exception("更新配置失败")
        return jsonify({"success": False, "message": f"更新配置失败: {exc}"}), 500