""" 置顶和热度 API """ from flask import Blueprint, request, jsonify from config import MODELS_FILE, GPUS_FILE, CPUS_FILE, DATA_DIR from utils import load_data, save_data pin_bp = Blueprint('api_pin', __name__) def _toggle_pin(file_path, item_id, entity_name): items = load_data(file_path) item = next((i for i in items if i['id'] == item_id), None) if not item: return jsonify({'error': f'{entity_name} not found'}), 404 item['is_pinned'] = not item.get('is_pinned', False) save_data(file_path, items) return jsonify({'success': True, 'is_pinned': item['is_pinned']}) def _add_view(file_path, item_id, entity_name): items = load_data(file_path) item = next((i for i in items if i['id'] == item_id), None) if not item: return jsonify({'error': f'{entity_name} not found'}), 404 item['views'] = item.get('views', 0) + 1 save_data(file_path, items) return jsonify({'success': True, 'views': item['views']}) # ---- Pin routes ---- @pin_bp.route('/api/models//pin', methods=['POST']) def api_toggle_model_pin(model_id): return _toggle_pin(MODELS_FILE, model_id, 'Model') @pin_bp.route('/api/gpus//pin', methods=['POST']) def api_toggle_gpu_pin(gpu_id): return _toggle_pin(GPUS_FILE, gpu_id, 'GPU') @pin_bp.route('/api/cpus//pin', methods=['POST']) def api_toggle_cpu_pin(cpu_id): return _toggle_pin(CPUS_FILE, cpu_id, 'CPU') @pin_bp.route('/api/items///pin', methods=['POST']) def api_toggle_item_pin(category_id, item_id): items_file = DATA_DIR / f'items_{category_id}.json' return _toggle_pin(items_file, item_id, 'Item') # ---- View routes ---- @pin_bp.route('/api/models//view', methods=['POST']) def api_model_view(model_id): return _add_view(MODELS_FILE, model_id, 'Model') @pin_bp.route('/api/gpus//view', methods=['POST']) def api_gpu_view(gpu_id): return _add_view(GPUS_FILE, gpu_id, 'GPU') @pin_bp.route('/api/cpus//view', methods=['POST']) def api_cpu_view(cpu_id): return _add_view(CPUS_FILE, cpu_id, 'CPU') @pin_bp.route('/api/items///view', methods=['POST']) def api_item_view(category_id, item_id): items_file = DATA_DIR / f'items_{category_id}.json' return _add_view(items_file, item_id, 'Item')