
This is mostly stylistic change, but it clearly shows the intended behavior should we detect more integrity violation errors.
62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
from sqlalchemy import Column, Integer, DateTime, UnicodeText, ForeignKey
|
|
from sqlalchemy.orm import relationship, backref
|
|
from sqlalchemy.sql.expression import func
|
|
from szurubooru.db.base import Base
|
|
|
|
|
|
class CommentScore(Base):
|
|
__tablename__ = 'comment_score'
|
|
|
|
comment_id = Column(
|
|
'comment_id',
|
|
Integer,
|
|
ForeignKey('comment.id'),
|
|
nullable=False,
|
|
primary_key=True)
|
|
user_id = Column(
|
|
'user_id',
|
|
Integer,
|
|
ForeignKey('user.id'),
|
|
nullable=False,
|
|
primary_key=True,
|
|
index=True)
|
|
time = Column('time', DateTime, nullable=False)
|
|
score = Column('score', Integer, nullable=False)
|
|
|
|
comment = relationship('Comment')
|
|
user = relationship(
|
|
'User',
|
|
backref=backref('comment_scores', cascade='all, delete-orphan'))
|
|
|
|
|
|
class Comment(Base):
|
|
__tablename__ = 'comment'
|
|
|
|
comment_id = Column('id', Integer, primary_key=True)
|
|
post_id = Column(
|
|
'post_id', Integer, ForeignKey('post.id'), nullable=False, index=True)
|
|
user_id = Column(
|
|
'user_id', Integer, ForeignKey('user.id'), nullable=True, index=True)
|
|
version = Column('version', Integer, default=1, nullable=False)
|
|
creation_time = Column('creation_time', DateTime, nullable=False)
|
|
last_edit_time = Column('last_edit_time', DateTime)
|
|
text = Column('text', UnicodeText, default=None)
|
|
|
|
user = relationship('User')
|
|
post = relationship('Post')
|
|
scores = relationship(
|
|
'CommentScore', cascade='all, delete-orphan', lazy='joined')
|
|
|
|
@property
|
|
def score(self):
|
|
from szurubooru.db import session
|
|
return session \
|
|
.query(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,
|
|
}
|