""" 动态分类数据 API """ import uuid from datetime import datetime from flask import Blueprint, request, jsonify from config import DATA_DIR from utils import load_data, save_data, parse_date_to_timestamp items_bp = Blueprint('api_items', __name__) @items_bp.route('/api/items/') def api_items(category_id): items_file = DATA_DIR / f'items_{category_id}.json' items = load_data(items_file) hide_hidden = request.args.get('all', '0') == '0' if hide_hidden: items = [i for i in items if i.get('visible', True)] sort_by = request.args.get('sort', 'default') reverse = request.args.get('order', 'desc') == 'desc' def safe_key(x, key): val = x.get(key) if val is None: return 0 if key in ['price', 'views', 'year'] else '' return val if sort_by == 'default': items = sorted(items, key=lambda x: ( not x.get('is_pinned', False), -(parse_date_to_timestamp(x.get('publish_date', '')) or parse_date_to_timestamp(x.get('created_at', '')) or 0) )) elif sort_by in ['name', 'price', 'year', 'created_at', 'publish_date', 'views', 'updated_at']: items = sorted(items, key=lambda x: safe_key(x, sort_by), reverse=reverse) return jsonify(items) @items_bp.route('/api/items//') def api_item_detail(category_id, item_id): items_file = DATA_DIR / f'items_{category_id}.json' items = load_data(items_file) item = next((i for i in items if i['id'] == item_id), None) if not item: return jsonify({'error': 'Item not found'}), 404 return jsonify(item) @items_bp.route('/api/items/', methods=['POST']) def api_create_item(category_id): data = request.get_json() items_file = DATA_DIR / f'items_{category_id}.json' items = load_data(items_file) data['id'] = uuid.uuid4().hex[:12] data['category_id'] = category_id data['created_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') data['visible'] = data.get('visible', True) data['publish_date'] = data.get('publish_date', '') data['views'] = data.get('views', 0) data['is_pinned'] = data.get('is_pinned', False) items.append(data) save_data(items_file, items) return jsonify(data) @items_bp.route('/api/items//', methods=['PUT']) def api_update_item(category_id, item_id): data = request.get_json() items_file = DATA_DIR / f'items_{category_id}.json' items = load_data(items_file) item = next((i for i in items if i['id'] == item_id), None) if not item: return jsonify({'error': 'Item not found'}), 404 item.update(data) item['updated_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') save_data(items_file, items) return jsonify(item) @items_bp.route('/api/items//', methods=['DELETE']) def api_delete_item(category_id, item_id): items_file = DATA_DIR / f'items_{category_id}.json' items = load_data(items_file) items = [i for i in items if i['id'] != item_id] save_data(items_file, items) return jsonify({'success': True}) @items_bp.route('/api/items///visible', methods=['POST']) def api_toggle_item_visible(category_id, item_id): items_file = DATA_DIR / f'items_{category_id}.json' items = load_data(items_file) item = next((i for i in items if i['id'] == item_id), None) if not item: return jsonify({'error': 'Item not found'}), 404 item['visible'] = not item.get('visible', True) save_data(items_file, items) return jsonify({'success': True, 'visible': item['visible']})