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