blob: f27e7d33034fa8485543bdab408d976e6b12ead3 [file] [log] [blame]
wueb6e6ca2025-06-15 10:35:32 +08001# models/user.py
2
3from datetime import datetime
4from extensions import db
5
6# 关联表:用户关注关系
7follows = db.Table(
8 'follows',
9 db.Column('follower_id', db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), primary_key=True),
10 db.Column('followee_id', db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), primary_key=True),
11 db.Column('created_at', db.DateTime, default=datetime.utcnow, nullable=False)
12)
13
14class User(db.Model):
15 __tablename__ = 'users'
16
17 id = db.Column(db.Integer, primary_key=True)
18 username = db.Column(db.String(50), unique=True, nullable=False)
19 password = db.Column(db.String(255), nullable=False)
20 email = db.Column(db.String(100), unique=True, nullable=False)
21 avatar = db.Column(db.String(255))
22 role = db.Column(db.Enum('user', 'admin'), default='user', nullable=False)
23 bio = db.Column(db.String(255))
24 status = db.Column(db.Enum('active', 'banned', 'muted'), default='active', nullable=False)
25 created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
26 updated_at = db.Column(
27 db.DateTime,
28 default=datetime.utcnow,
29 onupdate=datetime.utcnow,
30 nullable=False
31 )
32
33 # 用户发布的帖子
34 posts = db.relationship(
35 'Post',
36 backref='author',
37 lazy='dynamic',
38 cascade='all, delete-orphan'
39 )
40
41 # 用户的互动行为
42 behaviors = db.relationship(
43 'Behavior',
44 backref='user',
45 lazy='dynamic',
46 cascade='all, delete-orphan'
47 )
48
49 # 用户发表的评论
50 comments = db.relationship(
51 'Comment',
52 backref='user',
53 lazy='dynamic',
54 cascade='all, delete-orphan'
55 )
56
57 # 用户关注的对象列表
58 following = db.relationship(
59 'User',
60 secondary=follows,
61 primaryjoin=(id == follows.c.follower_id),
62 secondaryjoin=(id == follows.c.followee_id),
63 backref=db.backref('followers', lazy='dynamic'),
64 lazy='dynamic'
65 )
66
67 def __repr__(self):
68 return f"<User {self.username!r} id={self.id}>"