blob: ab99191d787cb4817af02bea1db581cc1180d22d [file] [log] [blame]
wueb6e6ca2025-06-15 10:35:32 +08001# models/post.py
2from extensions import db
3from datetime import datetime
4
5# association table for Post <-> Tag
6post_tags = db.Table(
7 'post_tags',
8 db.Column('post_id', db.Integer, db.ForeignKey('posts.id', ondelete='CASCADE'), primary_key=True),
9 db.Column('tag_id', db.Integer, db.ForeignKey('tags.id', ondelete='CASCADE'), primary_key=True)
10)
11
12class Post(db.Model):
13 __tablename__ = 'posts'
14
15 id = db.Column(db.Integer, primary_key=True)
16 user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), nullable=False)
17 topic_id = db.Column(db.Integer, db.ForeignKey('topics.id', ondelete='SET NULL'))
18 type = db.Column(db.Enum('text', 'image', 'video', 'document'), default='text', nullable=False)
19 title = db.Column(db.String(255), nullable=False)
20 content = db.Column(db.Text, nullable=False)
21 media_urls = db.Column(db.JSON)
22 status = db.Column(db.Enum('draft', 'pending', 'published', 'deleted', 'rejected'),
23 default='draft', nullable=False)
24 heat = db.Column(db.Integer, default=0, nullable=False)
25 created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
26 updated_at = db.Column(db.DateTime, default=datetime.utcnow,
27 onupdate=datetime.utcnow, nullable=False)
28
29 # relationships
30 tags = db.relationship('Tag', secondary=post_tags, backref=db.backref('posts', lazy='dynamic'))
31 behaviors = db.relationship('Behavior', backref='post', lazy='dynamic', cascade='all, delete')
32 comments = db.relationship('Comment', backref='post', lazy='dynamic', cascade='all, delete')