feat: 新增平台

This commit is contained in:
2025-11-30 19:49:25 +08:00
parent c3e56a954d
commit fbd2c491b2
41 changed files with 4293 additions and 76 deletions

View File

@@ -219,14 +219,22 @@ def profile():
@login_required
def get_profile():
"""获取用户个人中心数据"""
from models import UserGroup, DailyParseStat, ParseLog
from datetime import date
from models import UserGroup, DailyParseStat, ParseLog, UserGroupExpiry
from datetime import date, datetime
# 获取用户组信息
user_group = UserGroup.query.get(current_user.group_id)
daily_limit = user_group.daily_limit if user_group else 10
group_name = user_group.name if user_group else '普通用户'
# 获取套餐到期时间
group_expiry = UserGroupExpiry.query.filter_by(user_id=current_user.id).first()
expires_at = None
is_expired = False
if group_expiry:
expires_at = group_expiry.expires_at.strftime('%Y-%m-%d %H:%M') if group_expiry.expires_at else None
is_expired = group_expiry.expires_at < datetime.utcnow() if group_expiry.expires_at else False
# 获取今日使用次数
today = date.today()
today_stat = DailyParseStat.query.filter_by(
@@ -263,7 +271,9 @@ def get_profile():
'group': {
'id': current_user.group_id,
'name': group_name,
'daily_limit': daily_limit
'daily_limit': daily_limit,
'expires_at': expires_at,
'is_expired': is_expired
},
'usage': {
'daily_limit': daily_limit,
@@ -274,3 +284,72 @@ def get_profile():
'parse_logs': logs_data
}
})
@auth_bp.route('/api/redeem', methods=['POST'])
@login_required
def redeem_code():
"""用户兑换码"""
from models import RedeemCode, UserGroupExpiry
from datetime import datetime, timedelta
data = request.get_json()
code_str = data.get('code', '').strip().upper()
if not code_str:
return jsonify({'success': False, 'message': '请输入兑换码'}), 400
# 查找兑换码
code = RedeemCode.query.filter_by(code=code_str).first()
if not code:
return jsonify({'success': False, 'message': '兑换码不存在'}), 404
if code.is_used:
return jsonify({'success': False, 'message': '兑换码已被使用'}), 400
if code.expires_at and code.expires_at < datetime.utcnow():
return jsonify({'success': False, 'message': '兑换码已过期'}), 400
# 执行兑换
user = current_user
# 更新用户组
old_group_id = user.group_id
user.group_id = code.target_group_id
# 计算到期时间
expires_at = datetime.utcnow() + timedelta(days=code.duration_days)
# 更新或创建到期记录
expiry = UserGroupExpiry.query.filter_by(user_id=user.id).first()
if expiry:
# 如果当前套餐未过期且是同一套餐,则叠加时间
if expiry.group_id == code.target_group_id and expiry.expires_at > datetime.utcnow():
expires_at = expiry.expires_at + timedelta(days=code.duration_days)
expiry.group_id = code.target_group_id
expiry.expires_at = expires_at
else:
expiry = UserGroupExpiry(
user_id=user.id,
group_id=code.target_group_id,
expires_at=expires_at
)
db.session.add(expiry)
# 标记兑换码已使用
code.is_used = True
code.used_by = user.id
code.used_at = datetime.utcnow()
db.session.commit()
return jsonify({
'success': True,
'message': f'兑换成功!您已升级为 {code.target_group.name},有效期至 {expires_at.strftime("%Y-%m-%d %H:%M")}',
'data': {
'group_name': code.target_group.name,
'expires_at': expires_at.strftime('%Y-%m-%d %H:%M'),
'duration_days': code.duration_days
}
})