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

@@ -159,3 +159,73 @@ class HealthCheckLog(db.Model):
response_time = db.Column(db.Integer)
error_message = db.Column(db.Text)
checked_at = db.Column(db.DateTime, default=datetime.utcnow)
class UserApiKey(db.Model):
"""用户 API Key"""
__tablename__ = 'user_api_keys'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
name = db.Column(db.String(100), nullable=False) # Key 名称,方便用户区分
api_key = db.Column(db.String(64), unique=True, nullable=False) # API Key
is_active = db.Column(db.Boolean, default=True)
daily_limit = db.Column(db.Integer, default=100) # 每日调用限制
total_calls = db.Column(db.Integer, default=0) # 总调用次数
last_used_at = db.Column(db.DateTime) # 最后使用时间
last_used_ip = db.Column(db.String(45)) # 最后使用IP
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
user = db.relationship('User', backref='api_keys')
class ApiKeyDailyStat(db.Model):
"""API Key 每日统计"""
__tablename__ = 'api_key_daily_stats'
id = db.Column(db.Integer, primary_key=True)
api_key_id = db.Column(db.Integer, db.ForeignKey('user_api_keys.id'), nullable=False)
date = db.Column(db.Date, nullable=False)
call_count = db.Column(db.Integer, default=0)
success_count = db.Column(db.Integer, default=0)
fail_count = db.Column(db.Integer, default=0)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
api_key = db.relationship('UserApiKey', backref='daily_stats')
class RedeemCode(db.Model):
"""兑换码"""
__tablename__ = 'redeem_codes'
id = db.Column(db.Integer, primary_key=True)
code = db.Column(db.String(32), unique=True, nullable=False) # 兑换码
batch_id = db.Column(db.String(32)) # 批次ID用于批量管理
target_group_id = db.Column(db.Integer, db.ForeignKey('user_groups.id'), nullable=False) # 兑换后的用户组
duration_days = db.Column(db.Integer, default=30) # 有效期天数
is_used = db.Column(db.Boolean, default=False) # 是否已使用
used_by = db.Column(db.Integer, db.ForeignKey('users.id')) # 使用者
used_at = db.Column(db.DateTime) # 使用时间
expires_at = db.Column(db.DateTime) # 兑换码过期时间
remark = db.Column(db.String(255)) # 备注
created_at = db.Column(db.DateTime, default=datetime.utcnow)
target_group = db.relationship('UserGroup', backref='redeem_codes')
user = db.relationship('User', backref='redeemed_codes')
class UserGroupExpiry(db.Model):
"""用户组到期时间记录"""
__tablename__ = 'user_group_expiry'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False, unique=True)
group_id = db.Column(db.Integer, db.ForeignKey('user_groups.id'), nullable=False)
expires_at = db.Column(db.DateTime, nullable=False) # 到期时间
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
user = db.relationship('User', backref='group_expiry')
group = db.relationship('UserGroup')