v1.8.0: 模块化重构 + 后台登录认证
This commit is contained in:
81
modules/routes/api_knowledge.py
Normal file
81
modules/routes/api_knowledge.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
"""
|
||||||
|
知识库 API
|
||||||
|
"""
|
||||||
|
import uuid
|
||||||
|
from datetime import datetime
|
||||||
|
from flask import Blueprint, request, jsonify
|
||||||
|
from config import KNOWLEDGE_FILE
|
||||||
|
from utils import load_data, save_data
|
||||||
|
|
||||||
|
knowledge_bp = Blueprint('api_knowledge', __name__)
|
||||||
|
|
||||||
|
|
||||||
|
@knowledge_bp.route('/api/knowledge')
|
||||||
|
def api_knowledge():
|
||||||
|
knowledge = load_data(KNOWLEDGE_FILE)
|
||||||
|
hide_hidden = request.args.get('all', '0') == '0'
|
||||||
|
if hide_hidden:
|
||||||
|
knowledge = [k for k in knowledge if k.get('visible', True)]
|
||||||
|
keyword = request.args.get('q', '').strip().lower()
|
||||||
|
if keyword:
|
||||||
|
knowledge = [k for k in knowledge if keyword in k.get('title', '').lower() or
|
||||||
|
keyword in k.get('content', '').lower()]
|
||||||
|
category = request.args.get('category', '')
|
||||||
|
if category:
|
||||||
|
knowledge = [k for k in knowledge if k.get('category') == category]
|
||||||
|
return jsonify(sorted(knowledge, key=lambda x: x.get('order', 0)))
|
||||||
|
|
||||||
|
|
||||||
|
@knowledge_bp.route('/api/knowledge/<knowledge_id>')
|
||||||
|
def api_knowledge_detail(knowledge_id):
|
||||||
|
knowledge = load_data(KNOWLEDGE_FILE)
|
||||||
|
item = next((k for k in knowledge if k['id'] == knowledge_id), None)
|
||||||
|
if not item:
|
||||||
|
return jsonify({'error': 'Knowledge not found'}), 404
|
||||||
|
return jsonify(item)
|
||||||
|
|
||||||
|
|
||||||
|
@knowledge_bp.route('/api/knowledge', methods=['POST'])
|
||||||
|
def api_create_knowledge():
|
||||||
|
data = request.get_json()
|
||||||
|
knowledge = load_data(KNOWLEDGE_FILE)
|
||||||
|
data['id'] = uuid.uuid4().hex[:12]
|
||||||
|
data['created_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
data['visible'] = data.get('visible', True)
|
||||||
|
if 'order' not in data:
|
||||||
|
data['order'] = len(knowledge)
|
||||||
|
knowledge.append(data)
|
||||||
|
save_data(KNOWLEDGE_FILE, knowledge)
|
||||||
|
return jsonify(data)
|
||||||
|
|
||||||
|
|
||||||
|
@knowledge_bp.route('/api/knowledge/<knowledge_id>', methods=['PUT'])
|
||||||
|
def api_update_knowledge(knowledge_id):
|
||||||
|
data = request.get_json()
|
||||||
|
knowledge = load_data(KNOWLEDGE_FILE)
|
||||||
|
item = next((k for k in knowledge if k['id'] == knowledge_id), None)
|
||||||
|
if not item:
|
||||||
|
return jsonify({'error': 'Knowledge not found'}), 404
|
||||||
|
item.update(data)
|
||||||
|
item['updated_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
save_data(KNOWLEDGE_FILE, knowledge)
|
||||||
|
return jsonify(item)
|
||||||
|
|
||||||
|
|
||||||
|
@knowledge_bp.route('/api/knowledge/<knowledge_id>', methods=['DELETE'])
|
||||||
|
def api_delete_knowledge(knowledge_id):
|
||||||
|
knowledge = load_data(KNOWLEDGE_FILE)
|
||||||
|
knowledge = [k for k in knowledge if k['id'] != knowledge_id]
|
||||||
|
save_data(KNOWLEDGE_FILE, knowledge)
|
||||||
|
return jsonify({'success': True})
|
||||||
|
|
||||||
|
|
||||||
|
@knowledge_bp.route('/api/knowledge/<knowledge_id>/visible', methods=['POST'])
|
||||||
|
def api_toggle_knowledge_visible(knowledge_id):
|
||||||
|
knowledge = load_data(KNOWLEDGE_FILE)
|
||||||
|
item = next((k for k in knowledge if k['id'] == knowledge_id), None)
|
||||||
|
if not item:
|
||||||
|
return jsonify({'error': 'Knowledge not found'}), 404
|
||||||
|
item['visible'] = not item.get('visible', True)
|
||||||
|
save_data(KNOWLEDGE_FILE, knowledge)
|
||||||
|
return jsonify({'success': True, 'visible': item['visible']})
|
||||||
Reference in New Issue
Block a user