Files
ai_api_web/backend/models/user.py
2026-01-22 18:26:47 +08:00

47 lines
2.0 KiB
Python

from models import db
from datetime import datetime
import bcrypt
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False, index=True)
email = db.Column(db.String(120), unique=True, nullable=True)
password_hash = db.Column(db.String(255), nullable=False)
balance = db.Column(db.Numeric(10, 2), default=0.00)
total_consumption = db.Column(db.Numeric(10, 2), default=0.00)
request_count = db.Column(db.Integer, default=0)
user_group = db.Column(db.String(50), default='default')
invite_code = db.Column(db.String(20), unique=True, nullable=True)
invited_by = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# 关系
tokens = db.relationship('Token', backref='user', lazy=True, cascade='all, delete-orphan')
usage_logs = db.relationship('UsageLog', backref='user', lazy=True)
recharge_records = db.relationship('RechargeRecord', backref='user', lazy=True)
def set_password(self, password):
"""设置密码"""
self.password_hash = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
def check_password(self, password):
"""验证密码"""
return bcrypt.checkpw(password.encode('utf-8'), self.password_hash.encode('utf-8'))
def to_dict(self):
"""转换为字典"""
return {
'id': self.id,
'username': self.username,
'email': self.email,
'balance': float(self.balance),
'total_consumption': float(self.total_consumption),
'request_count': self.request_count,
'user_group': self.user_group,
'invite_code': self.invite_code,
'created_at': self.created_at.isoformat() if self.created_at else None,
}