初始化提交

This commit is contained in:
2025-12-14 15:40:49 +08:00
commit 410b2f068d
72 changed files with 10460 additions and 0 deletions

View File

@@ -0,0 +1,113 @@
"""管理员相关路由"""
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