|
|
from flask_sqlalchemy import SQLAlchemy |
|
|
from datetime import datetime |
|
|
|
|
|
db = SQLAlchemy() |
|
|
|
|
|
|
|
|
class Board(db.Model): |
|
|
id = db.Column(db.Integer, primary_key=True) |
|
|
slug = db.Column(db.String(10), unique=True, nullable=False) |
|
|
name = db.Column(db.String(50), nullable=False) |
|
|
description = db.Column(db.String(200)) |
|
|
posts = db.relationship("Post", backref="board", lazy=True) |
|
|
|
|
|
|
|
|
class User(db.Model): |
|
|
id = db.Column(db.Integer, primary_key=True) |
|
|
nickname = db.Column(db.String(50), unique=True, nullable=False) |
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow) |
|
|
last_seen_at = db.Column(db.DateTime, default=datetime.utcnow) |
|
|
posts = db.relationship("Post", backref="user", lazy=True) |
|
|
|
|
|
|
|
|
class PostFile(db.Model): |
|
|
id = db.Column(db.Integer, primary_key=True) |
|
|
post_id = db.Column(db.Integer, db.ForeignKey("post.id"), nullable=False) |
|
|
filename = db.Column(db.String(100), nullable=False) |
|
|
original_filename = db.Column(db.String(100), nullable=False) |
|
|
|
|
|
|
|
|
class Post(db.Model): |
|
|
id = db.Column(db.Integer, primary_key=True) |
|
|
thread_id = db.Column( |
|
|
db.Integer, db.ForeignKey("post.id"), nullable=True |
|
|
) |
|
|
board_id = db.Column(db.Integer, db.ForeignKey("board.id"), nullable=False) |
|
|
user_id = db.Column( |
|
|
db.Integer, db.ForeignKey("user.id"), nullable=True |
|
|
) |
|
|
content = db.Column(db.Text, nullable=True) |
|
|
nickname = db.Column(db.String(50), default="Anonyme") |
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow) |
|
|
updated_at = db.Column(db.DateTime, default=datetime.utcnow) |
|
|
ip_address = db.Column(db.String(50), nullable=True) |
|
|
|
|
|
files = db.relationship("PostFile", backref="post", lazy=True) |
|
|
|
|
|
|
|
|
replies = db.relationship( |
|
|
"Post", backref=db.backref("parent", remote_side=[id]), lazy=True |
|
|
) |
|
|
|
|
|
|
|
|
class BannedIP(db.Model): |
|
|
id = db.Column(db.Integer, primary_key=True) |
|
|
ip_address = db.Column(db.String(50), unique=True, nullable=False) |
|
|
reason = db.Column(db.String(200)) |
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow) |
|
|
|