Files
param-hub-python/modules/routes/api_pin.py

67 lines
2.3 KiB
Python

"""
置顶和热度 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/<model_id>/pin', methods=['POST'])
def api_toggle_model_pin(model_id):
return _toggle_pin(MODELS_FILE, model_id, 'Model')
@pin_bp.route('/api/gpus/<gpu_id>/pin', methods=['POST'])
def api_toggle_gpu_pin(gpu_id):
return _toggle_pin(GPUS_FILE, gpu_id, 'GPU')
@pin_bp.route('/api/cpus/<cpu_id>/pin', methods=['POST'])
def api_toggle_cpu_pin(cpu_id):
return _toggle_pin(CPUS_FILE, cpu_id, 'CPU')
@pin_bp.route('/api/items/<category_id>/<item_id>/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/<model_id>/view', methods=['POST'])
def api_model_view(model_id):
return _add_view(MODELS_FILE, model_id, 'Model')
@pin_bp.route('/api/gpus/<gpu_id>/view', methods=['POST'])
def api_gpu_view(gpu_id):
return _add_view(GPUS_FILE, gpu_id, 'GPU')
@pin_bp.route('/api/cpus/<cpu_id>/view', methods=['POST'])
def api_cpu_view(cpu_id):
return _add_view(CPUS_FILE, cpu_id, 'CPU')
@pin_bp.route('/api/items/<category_id>/<item_id>/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')