feat: 新增平台
This commit is contained in:
@@ -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
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user