"""管理员相关路由""" from flask import Blueprint, request, jsonify from flask_jwt_extended import jwt_required, get_jwt_identity from models import User from services.admin_service import AdminService admin_bp = Blueprint('admin', __name__) def admin_required(): """管理员权限验证装饰器""" current_user_id = get_jwt_identity() user = User.query.get(current_user_id) if not user or not user.is_admin: return None return user @admin_bp.route('/users', methods=['GET']) @jwt_required() def get_users(): """获取用户列表""" if not admin_required(): return jsonify({'error': '需要管理员权限'}), 403 # 分页参数 page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 20, type=int) search = request.args.get('search', '') result, status_code = AdminService.get_users(page, per_page, search) return jsonify(result), status_code @admin_bp.route('/users/', methods=['GET']) @jwt_required() def get_user_detail(user_id): """获取用户详情""" if not admin_required(): return jsonify({'error': '需要管理员权限'}), 403 result, status_code = AdminService.get_user_detail(user_id) return jsonify(result), status_code @admin_bp.route('/users//toggle-status', methods=['POST']) @jwt_required() def toggle_user_status(user_id): """启用/禁用用户""" admin = admin_required() if not admin: return jsonify({'error': '需要管理员权限'}), 403 result, status_code = AdminService.toggle_user_status(admin.id, user_id) return jsonify(result), status_code @admin_bp.route('/users//adjust-balance', methods=['POST']) @jwt_required() def adjust_balance(user_id): """调整用户余额""" if not admin_required(): return jsonify({'error': '需要管理员权限'}), 403 data = request.get_json() result, status_code = AdminService.adjust_balance(user_id, data) return jsonify(result), status_code @admin_bp.route('/orders', methods=['GET']) @jwt_required() def get_all_orders(): """获取所有订单""" if not admin_required(): return jsonify({'error': '需要管理员权限'}), 403 page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 20, type=int) status = request.args.get('status') result, status_code = AdminService.get_all_orders(page, per_page, status) return jsonify(result), status_code @admin_bp.route('/api-calls', methods=['GET']) @jwt_required() def get_all_api_calls(): """获取所有API调用记录""" if not admin_required(): return jsonify({'error': '需要管理员权限'}), 403 page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 20, type=int) status = request.args.get('status') result, status_code = AdminService.get_all_api_calls(page, per_page, status) return jsonify(result), status_code @admin_bp.route('/stats/overview', methods=['GET']) @jwt_required() def get_overview_stats(): """获取总览统计""" if not admin_required(): return jsonify({'error': '需要管理员权限'}), 403 result, status_code = AdminService.get_overview_stats() return jsonify(result), status_code @admin_bp.route('/stats/chart', methods=['GET']) @jwt_required() def get_chart_data(): """获取图表数据(最近7天)""" if not admin_required(): return jsonify({'error': '需要管理员权限'}), 403 days = request.args.get('days', 7, type=int) result, status_code = AdminService.get_chart_data(days) return jsonify(result), status_code