blob: ab99191d787cb4817af02bea1db581cc1180d22d [file] [log] [blame] [edit]
# models/post.py
from extensions import db
from datetime import datetime
# association table for Post <-> Tag
post_tags = db.Table(
'post_tags',
db.Column('post_id', db.Integer, db.ForeignKey('posts.id', ondelete='CASCADE'), primary_key=True),
db.Column('tag_id', db.Integer, db.ForeignKey('tags.id', ondelete='CASCADE'), primary_key=True)
)
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), nullable=False)
topic_id = db.Column(db.Integer, db.ForeignKey('topics.id', ondelete='SET NULL'))
type = db.Column(db.Enum('text', 'image', 'video', 'document'), default='text', nullable=False)
title = db.Column(db.String(255), nullable=False)
content = db.Column(db.Text, nullable=False)
media_urls = db.Column(db.JSON)
status = db.Column(db.Enum('draft', 'pending', 'published', 'deleted', 'rejected'),
default='draft', nullable=False)
heat = db.Column(db.Integer, default=0, nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
updated_at = db.Column(db.DateTime, default=datetime.utcnow,
onupdate=datetime.utcnow, nullable=False)
# relationships
tags = db.relationship('Tag', secondary=post_tags, backref=db.backref('posts', lazy='dynamic'))
behaviors = db.relationship('Behavior', backref='post', lazy='dynamic', cascade='all, delete')
comments = db.relationship('Comment', backref='post', lazy='dynamic', cascade='all, delete')