1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
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,
}
|