78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
import sqlalchemy as sa
|
|
|
|
from szurubooru.db import get_session
|
|
from szurubooru.model.base import Base
|
|
|
|
|
|
class CommentScore(Base):
|
|
__tablename__ = "comment_score"
|
|
|
|
comment_id = sa.Column(
|
|
"comment_id",
|
|
sa.Integer,
|
|
sa.ForeignKey("comment.id"),
|
|
nullable=False,
|
|
primary_key=True,
|
|
)
|
|
user_id = sa.Column(
|
|
"user_id",
|
|
sa.Integer,
|
|
sa.ForeignKey("user.id"),
|
|
nullable=False,
|
|
primary_key=True,
|
|
index=True,
|
|
)
|
|
time = sa.Column("time", sa.DateTime, nullable=False)
|
|
score = sa.Column("score", sa.Integer, nullable=False)
|
|
|
|
comment = sa.orm.relationship("Comment")
|
|
user = sa.orm.relationship(
|
|
"User",
|
|
backref=sa.orm.backref("comment_scores", cascade="all, delete-orphan"),
|
|
)
|
|
|
|
|
|
class Comment(Base):
|
|
__tablename__ = "comment"
|
|
|
|
comment_id = sa.Column("id", sa.Integer, primary_key=True)
|
|
post_id = sa.Column(
|
|
"post_id",
|
|
sa.Integer,
|
|
sa.ForeignKey("post.id"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
user_id = sa.Column(
|
|
"user_id",
|
|
sa.Integer,
|
|
sa.ForeignKey("user.id"),
|
|
nullable=True,
|
|
index=True,
|
|
)
|
|
version = sa.Column("version", sa.Integer, default=1, nullable=False)
|
|
creation_time = sa.Column("creation_time", sa.DateTime, nullable=False)
|
|
last_edit_time = sa.Column("last_edit_time", sa.DateTime)
|
|
text = sa.Column("text", sa.UnicodeText, default=None)
|
|
|
|
user = sa.orm.relationship("User")
|
|
post = sa.orm.relationship("Post")
|
|
scores = sa.orm.relationship(
|
|
"CommentScore", cascade="all, delete-orphan", lazy="joined"
|
|
)
|
|
|
|
@property
|
|
def score(self) -> int:
|
|
return (
|
|
get_session()
|
|
.query(sa.sql.expression.func.sum(CommentScore.score))
|
|
.filter(CommentScore.comment_id == self.comment_id)
|
|
.one()[0]
|
|
or 0
|
|
)
|
|
|
|
__mapper_args__ = {
|
|
"version_id_col": version,
|
|
"version_id_generator": False,
|
|
}
|