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