Files

81 lines
2.9 KiB
Python
Raw Permalink Normal View History

"""
知识库 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']})