wikilain/wikilain/models.py

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}>"