diff --git a/orm/__init__.py b/orm/__init__.py index bec01443..ac60adde 100644 --- a/orm/__init__.py +++ b/orm/__init__.py @@ -6,6 +6,7 @@ from orm.topic import Topic from orm.notification import Notification from orm.shout import Shout, ShoutAuthor, ShoutTopic, ShoutRating, ShoutViewByDay from orm.base import Base, engine +from orm.comment import Comment __all__ = ["User", "Role", "Operation", "Permission", "Message", "Shout", "Topic", "Notification"] diff --git a/orm/comment.py b/orm/comment.py index 3165c83d..3cf4f4dd 100644 --- a/orm/comment.py +++ b/orm/comment.py @@ -2,8 +2,8 @@ from typing import List from datetime import datetime from sqlalchemy import Column, Integer, String, ForeignKey, DateTime +from sqlalchemy.orm import relationship -from orm import Permission from orm.base import Base class CommentRating(Base): @@ -16,17 +16,17 @@ class CommentRating(Base): value = Column(Integer) class Comment(Base): - __tablename__ = 'Comment' + __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") + 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 + # TODO: work in progress, udpate this code diff --git a/orm/shout.py b/orm/shout.py index 69f2d91d..e3b73dfe 100644 --- a/orm/shout.py +++ b/orm/shout.py @@ -2,7 +2,8 @@ from typing import List from datetime import datetime from sqlalchemy import Table, Column, Integer, String, ForeignKey, DateTime, Boolean from sqlalchemy.orm import relationship -from orm import Permission, User, Topic, Comment +from orm import Permission, User, Topic +from orm.comment import Comment from orm.base import Base class ShoutAuthor(Base): @@ -11,13 +12,13 @@ class ShoutAuthor(Base): id = None shout = Column(ForeignKey('shout.id'), primary_key = True) user = Column(ForeignKey('user.id'), primary_key = True) - + class ShoutViewer(Base): - __tablename__ = "shout_viewer" - - id = None - shout = Column(ForeignKey('shout.id'), primary_key = True) - user = Column(ForeignKey('user.id'), primary_key = True) + __tablename__ = "shout_viewer" + + id = None + shout = Column(ForeignKey('shout.id'), primary_key = True) + user = Column(ForeignKey('user.id'), primary_key = True) class ShoutTopic(Base): __tablename__ = 'shout_topic' diff --git a/requirements.txt b/requirements.txt index e53568d3..2cd70474 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,8 +8,10 @@ pydantic passlib itsdangerous authlib -httpx +httpx<0.18.2 psycopg2-binary bson python-frontmatter -transliterate \ No newline at end of file +transliterate +requests +bcrypt diff --git a/resolvers/__init__.py b/resolvers/__init__.py index c0ea8d4c..c6508c86 100644 --- a/resolvers/__init__.py +++ b/resolvers/__init__.py @@ -1,4 +1,4 @@ -from resolvers.auth import login, sign_out, get_user, is_email_free, register, confirm +from resolvers.auth import login, sign_out, is_email_free, register, confirm from resolvers.inbox import create_message, delete_message, update_message, get_messages from resolvers.zine import create_shout, get_shout_by_slug from resolvers.profile import get_user_by_slug, get_current_user diff --git a/resolvers/profile.py b/resolvers/profile.py index 83a4dcc7..f54c72dc 100644 --- a/resolvers/profile.py +++ b/resolvers/profile.py @@ -6,16 +6,16 @@ import asyncio @query.field("getUserBySlug") # get a public profile async def get_user_by_slug(_, info, slug): - with local_session() as session: + with local_session() as session: user = session.query(User).filter(User.slug == slug).first() - return { "user": user } # TODO: remove some fields for public + return { "user": user } # TODO: remove some fields for public @query.field("getCurrentUser") @login_required -async def get_user(_, info): +async def get_current_user(_, info): auth = info.context["request"].auth user_id = auth.user_id with local_session() as session: user = session.query(User).filter(User.id == user_id).first() - return { "user": user } \ No newline at end of file + return { "user": user } diff --git a/resolvers/zine.py b/resolvers/zine.py index 11a510a8..b13cfe50 100644 --- a/resolvers/zine.py +++ b/resolvers/zine.py @@ -260,13 +260,10 @@ async def update_shout(_, info, id, input): @query.field("getShoutBySlug") #FIXME: add shout joined with comments async def get_shout_by_slug(_, info, slug): - # 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.slug == slug).\ - # TODO: join(Comment) to .comments limit(limit) shouts = [] for row in session.execute(stmt): @@ -274,4 +271,4 @@ async def get_shout_by_slug(_, info, slug): shout.rating = row.rating # TODO: shout.comments = shouts.append(shout) - return shout \ No newline at end of file + return shout