50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
from flask_sqlalchemy import SQLAlchemy
|
|
from flask_migrate import Migrate
|
|
|
|
db = SQLAlchemy()
|
|
migrate = Migrate(None, db)
|
|
|
|
class User(db.Model):
|
|
__tablename__ = "users"
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
username = db.Column(db.String, unique=True, nullable=False)
|
|
email = db.Column(db.String, unique=True, nullable=False)
|
|
avatar = db.Column(db.String, nullable=True)
|
|
|
|
def __repr__(self):
|
|
return f"<User {self.id} {self.username} {self.email} {self.avatar}>"
|
|
|
|
class Section(db.Model):
|
|
__tablename__ = "sections"
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
title = db.Column(db.String, unique=True, nullable=False)
|
|
articles = db.relationship("Article", backref="section", lazy=True)
|
|
|
|
def __repr__(self):
|
|
return f"<Section \"{self.title}\">"
|
|
|
|
DEFAULT_SECTION = 1
|
|
|
|
class Article(db.Model):
|
|
__tablename__ = "articles"
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
title = db.Column(db.String, unique=True, nullable=False)
|
|
section_id = db.Column(db.Integer, db.ForeignKey("sections.id"), nullable=False)
|
|
revisions = db.relationship("ArticleRevision", backref="article", lazy=True)
|
|
|
|
def __repr__(self):
|
|
return f"<Article \"{self.title}\">"
|
|
|
|
class ArticleRevision(db.Model):
|
|
__tablename__ = "articlerevisions"
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
article_id = db.Column(db.Integer, db.ForeignKey("articles.id"), nullable=False)
|
|
date = db.Column(db.DateTime, nullable=False)
|
|
user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
|
|
user = db.relationship("User", lazy=True)
|
|
changelog = db.Column(db.String, nullable=False)
|
|
content = db.Column(db.Text, nullable=False)
|
|
|
|
def __repr__(self):
|
|
return f"<ArticleRevision at {self.date} by {self.user}>"
|