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