Files
ewoooc/routes/notification_routes.py
OoO 2c869edcb1
All checks were successful
CD Pipeline / deploy (push) Successful in 1m0s
統一系統管理頁新版殼層
2026-05-14 00:43:55 +08:00

128 lines
4.1 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
通知模板管理路由
提供 API 和頁面來管理通知模板
"""
from flask import Blueprint, request, jsonify, render_template
from auth import login_required
from services.notification_service import NotificationTemplateService
from services.logger_manager import SystemLogger
from config import SYSTEM_VERSION
sys_log = SystemLogger("NotificationRoutes").get_logger()
notification_bp = Blueprint('notification', __name__)
# ==========================================
# 頁面路由
# ==========================================
@notification_bp.route('/notification_templates')
@login_required
def notification_templates_page():
"""通知模板管理頁面"""
return render_template('notification_templates.html',
system_version=SYSTEM_VERSION,
active_page='notification_templates')
# ==========================================
# API 路由
# ==========================================
@notification_bp.route('/api/notification/templates', methods=['GET'])
@login_required
def get_templates():
"""取得所有模板"""
category = request.args.get('category')
templates = NotificationTemplateService.get_all_templates(category)
categories = NotificationTemplateService.get_categories()
return jsonify({
'success': True,
'templates': templates,
'categories': categories
})
@notification_bp.route('/api/notification/templates/<code>', methods=['GET'])
@login_required
def get_template(code):
"""取得單一模板"""
template = NotificationTemplateService.get_template_by_code(code)
if template:
return jsonify({'success': True, 'template': template})
return jsonify({'success': False, 'error': '模板不存在'}), 404
@notification_bp.route('/api/notification/templates/<code>', methods=['PUT'])
@login_required
def update_template(code):
"""更新模板"""
data = request.get_json()
if not data:
return jsonify({'success': False, 'error': '無效的請求資料'}), 400
result = NotificationTemplateService.update_template(code, data)
if result['success']:
sys_log.info(f"[Notification] 模板已更新: {code}")
return jsonify(result)
return jsonify(result), 400
@notification_bp.route('/api/notification/templates/<code>/preview', methods=['POST'])
@login_required
def preview_template(code):
"""預覽模板"""
data = request.get_json() or {}
variables = data.get('variables', {})
result = NotificationTemplateService.render_template(code, variables)
if result and result.get('success'):
return jsonify(result)
return jsonify(result or {'success': False, 'error': '渲染失敗'}), 400
@notification_bp.route('/api/notification/render', methods=['POST'])
def render_for_n8n():
"""
API: 為 n8n 渲染模板
n8n 可調用此 API 取得格式化的訊息
"""
data = request.get_json()
if not data:
return jsonify({'success': False, 'error': '無效的請求資料'}), 400
code = data.get('template_code')
variables = data.get('variables', {})
if not code:
return jsonify({'success': False, 'error': '缺少 template_code'}), 400
result = NotificationTemplateService.render_template(code, variables)
if result and result.get('success'):
return jsonify(result)
return jsonify(result or {'success': False, 'error': '渲染失敗'}), 400
@notification_bp.route('/api/notification/categories', methods=['GET'])
@login_required
def get_categories():
"""取得所有分類"""
categories = NotificationTemplateService.get_categories()
return jsonify({'success': True, 'categories': categories})
@notification_bp.route('/api/notification/init', methods=['POST'])
@login_required
def init_templates():
"""初始化預設模板"""
try:
NotificationTemplateService.init_default_templates()
return jsonify({'success': True, 'message': '預設模板已初始化'})
except Exception as e:
return jsonify({'success': False, 'error': str(e)}), 500