From 32becea4da91fbd739baf1bf91b7de8e04cbfaac Mon Sep 17 00:00:00 2001 From: knst-kotov Date: Sun, 30 Jan 2022 11:35:49 +0300 Subject: [PATCH] add author subscription --- orm/user.py | 8 ++++++++ resolvers/profile.py | 31 ++++++++++++++++++++++++++++++- schema.graphql | 3 +++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/orm/user.py b/orm/user.py index 47f2c9a2..a9eb78c3 100644 --- a/orm/user.py +++ b/orm/user.py @@ -33,6 +33,14 @@ class UserRole(Base): user_id = Column(ForeignKey('user.id'), primary_key = True) role_id = Column(ForeignKey('role.id'), primary_key = True) +class AuthorSubscription(Base): + __tablename__ = "author_subscription" + + id = None + subscriber = Column(ForeignKey('user.slug'), primary_key = True) + author = Column(ForeignKey('user.slug'), primary_key = True) + createdAt = Column(DateTime, nullable=False, default = datetime.now, comment="Created at") + class User(Base): __tablename__ = "user" diff --git a/resolvers/profile.py b/resolvers/profile.py index f9284214..feb31573 100644 --- a/resolvers/profile.py +++ b/resolvers/profile.py @@ -1,9 +1,10 @@ from orm import User, UserRole, Role, UserRating +from orm.user import AuthorSubscription from orm.base import local_session from resolvers.base import mutation, query, subscription from auth.authenticate import login_required -from sqlalchemy import func +from sqlalchemy import func, and_ from sqlalchemy.orm import selectinload import asyncio @@ -46,3 +47,31 @@ async def update_profile(_, info, profile): session.commit() return {} + +@mutation.field("authorSubscribe") +@login_required +async def author_subscribe(_, info, slug): + user = info.context["request"].user + + AuthorSubscription.create( + subscriber = user.slug, + author = slug + ) + + return {} + +@mutation.field("authorUnsubscribe") +@login_required +async def author_unsubscribe(_, info, slug): + user = info.context["request"].user + + with local_session() as session: + sub = session.query(AuthorSubscription).\ + filter(and_(AuthorSubscription.subscriber == user.slug, AuthorSubscription.author == slug)).\ + first() + if not sub: + return { "error" : "subscription not exist" } + session.delete(sub) + session.commit() + + return {} diff --git a/schema.graphql b/schema.graphql index 07c06c7e..888e5419 100644 --- a/schema.graphql +++ b/schema.graphql @@ -150,6 +150,9 @@ type Mutation { createCommunity(title: String!, desc: String!): Community! updateCommunity(community: CommunityInput!): Community! deleteCommunity(id: Int!): Result! + + authorSubscribe(slug: String!): Result! + authorUnsubscribe(slug: String!): Result! } ################################### Query