diff --git a/orm/comment.py b/orm/comment.py new file mode 100644 index 00000000..3165c83d --- /dev/null +++ b/orm/comment.py @@ -0,0 +1,32 @@ +from typing import List +from datetime import datetime + +from sqlalchemy import Column, Integer, String, ForeignKey, DateTime + +from orm import Permission +from orm.base import Base + +class CommentRating(Base): + __tablename__ = "comment_rating" + + id = None + rater_id = Column(ForeignKey('user.id'), primary_key = True) + comment_id = Column(ForeignKey('comment.id'), primary_key = True) + ts: str = Column(DateTime, nullable=False, default = datetime.now, comment="Timestamp") + value = Column(Integer) + +class Comment(Base): + __tablename__ = 'Comment' + + author: int = Column(ForeignKey("user.id"), nullable=False, comment="Sender") + body: str = Column(String, nullable=False, comment="Body") + createdAt = Column(DateTime, nullable=False, default = datetime.now, comment="Created at") + updatedAt = Column(DateTime, nullable=True, comment="Updated at") + deletedAt = Column(DateTime, nullable=True, comment="Deleted at") + deletedBy = Column(ForeignKey("user.id"), nullable=True, comment="Deleted by") + shout: int = Column(ForeignKey("shout.id"), nullable=True, comment="Shout ID") + ratings = relationship(CommentRating, foreign_keys=CommentRating.comment_id) + old_id: str = Column(String, nullable = True) + + + # TODO: work in progress, udpate this code diff --git a/resolvers/zine.py b/resolvers/zine.py index e378f58d..45abe5de 100644 --- a/resolvers/zine.py +++ b/resolvers/zine.py @@ -260,14 +260,14 @@ async def update_shout(_, info, id, input): # TODO: get shout with comments query -@query.field("getShout") -async def get_shout(_, info, shout_slug): +@query.field("getShout") #FIXME: add shout joined with comments +async def get_shout(_, info, shout_id): month_ago = datetime.now() - timedelta(days = 30) with local_session() as session: - stmt = select(Shout, func.sum(ShoutRating.value).label("rating")).\ - join(ShoutRating).\ - where(ShoutRating.ts > month_ago).\ - # where(Shout.replyTo == shout_slug).\ + stmt = select(Comment, func.sum(CommentRating.value).label("rating")).\ + join(CommentRating).\ + where(CommentRating.ts > month_ago).\ + where(Comment.shout == shout_id).\ # join(ShoutComment) group_by(Shout.id).\ order_by(desc("rating")).\ diff --git a/schema.graphql b/schema.graphql index 75b38ea7..f8256d68 100644 --- a/schema.graphql +++ b/schema.graphql @@ -180,6 +180,21 @@ type Message { visibleForUsers: [Int]! } +type Comment { + id: Int! + author: Int! + body: String! + createdAt: DateTime! + updatedAt: DateTime! + shout: Int! + deletedAt: DateTime + deletedBy: Int + rating: Int + ratigns: [Rating] + views: Int + old_id: String +} + # is publication type Shout { id: Int!