114 lines
3.7 KiB
Python
114 lines
3.7 KiB
Python
"""管理员相关路由"""
|
||
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/<int:user_id>', 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/<int:user_id>/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/<int:user_id>/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
|