from flask import jsonify, request import api from api import limiter, require_auth, etag_response from api.setting import setting_bp from db import get_db from db.models.PathSetting import PathSetting import logging logger = logging.getLogger(__name__) @setting_bp.route('/path/', methods=['GET']) @limiter.limit(api.get_rate_limit) @etag_response def get_path_setting(setting_id): with get_db() as session: setting = session.query(PathSetting).get(setting_id) if setting is None: return jsonify({}), 204 return jsonify(setting.to_dict()), 200 @setting_bp.route('/path/', methods=['POST']) @require_auth(roles=['admin']) def create_path_setting(): data = request.json webhook_setting_id = data.get('webhook_setting_id') template_setting_id = data.get('template_setting_id') setting = PathSetting( webhook_setting_id=webhook_setting_id, template_setting_id=template_setting_id ) with get_db() as session: try: session.add(setting) session.commit() return jsonify(setting.to_dict()), 200 except Exception: logger.error(f"failed to create path setting") return jsonify({"error": "failed to create setting"}), 500 @setting_bp.route('/path/', methods=['PUT', 'PATCH']) @require_auth(roles=['admin']) def update_path_setting(setting_id): data = request.json with get_db() as session: try: setting = session.query(PathSetting).get(setting_id) if setting is None: return jsonify({"error": "setting not exists"}), 400 webhook_setting_id = data.get('webhook_setting_id', setting.webhook_setting_id) template_setting_id = data.get('template_setting_id', setting.template_setting_id) setting.webhook_setting_id = webhook_setting_id setting.template_setting_id = template_setting_id session.commit() return jsonify(setting.to_dict()), 200 except Exception: return jsonify({"error": "failed to update path setting"}), 500 @setting_bp.route('/path/', methods=['DELETE']) @require_auth(roles=['admin']) def delete_path_setting(setting_id): with get_db() as session: setting = session.query(PathSetting).get(setting_id) if setting is None: return jsonify({"error": "setting not exists"}), 400 session.delete(setting) return jsonify({"message": "deleted"}), 200