From a7944f5176256a6d6abebe347608e3400e4bf7c8 Mon Sep 17 00:00:00 2001 From: Untone Date: Tue, 12 Mar 2024 10:35:33 +0300 Subject: [PATCH] refactored --- resolvers/follower.py | 30 +++++++++++++++++++++++++++++- resolvers/topic.py | 34 ++-------------------------------- services/cache.py | 10 ++++------ 3 files changed, 35 insertions(+), 39 deletions(-) diff --git a/resolvers/follower.py b/resolvers/follower.py index a28a0671..c5c729e9 100644 --- a/resolvers/follower.py +++ b/resolvers/follower.py @@ -12,7 +12,6 @@ from orm.community import Community from orm.reaction import Reaction from orm.shout import Shout, ShoutReactionsFollower from orm.topic import Topic, TopicFollower -from resolvers.topic import topic_unfollow, topic_follow from resolvers.stat import get_with_stat, author_follows_topics, author_follows_authors from services.auth import login_required from services.db import local_session @@ -156,6 +155,35 @@ async def get_follows_by_user_id(user_id: str): return follows +def topic_follow(follower_id, slug): + try: + with local_session() as session: + topic = session.query(Topic).where(Topic.slug == slug).one() + _following = TopicFollower(topic=topic.id, follower=follower_id) + return None + except Exception as exc: + logger.error(exc) + return exc + + +def topic_unfollow(follower_id, slug): + try: + with local_session() as session: + sub = ( + session.query(TopicFollower) + .join(Topic) + .filter(and_(TopicFollower.follower == follower_id, Topic.slug == slug)) + .first() + ) + if sub: + session.delete(sub) + session.commit() + return None + except Exception as ex: + logger.debug(ex) + return ex + + def reactions_follow(author_id, shout_id, auto=False): try: with local_session() as session: diff --git a/resolvers/topic.py b/resolvers/topic.py index 843c129f..b4d6815b 100644 --- a/resolvers/topic.py +++ b/resolvers/topic.py @@ -1,13 +1,12 @@ -from sqlalchemy import and_, distinct, func, select +from sqlalchemy import distinct, func, select from orm.author import Author from orm.shout import ShoutTopic -from orm.topic import Topic, TopicFollower +from orm.topic import Topic from resolvers.stat import get_with_stat from services.auth import login_required from services.db import local_session from services.schema import mutation, query -from services.logger import root_logger as logger @query.field('get_topics_all') @@ -91,35 +90,6 @@ async def delete_topic(_, info, slug: str): return {'error': 'access denied'} -def topic_follow(follower_id, slug): - try: - with local_session() as session: - topic = session.query(Topic).where(Topic.slug == slug).one() - _following = TopicFollower(topic=topic.id, follower=follower_id) - return None - except Exception as exc: - logger.error(exc) - return exc - - -def topic_unfollow(follower_id, slug): - try: - with local_session() as session: - sub = ( - session.query(TopicFollower) - .join(Topic) - .filter(and_(TopicFollower.follower == follower_id, Topic.slug == slug)) - .first() - ) - if sub: - session.delete(sub) - session.commit() - return None - except Exception as ex: - logger.debug(ex) - return ex - - @query.field('get_topics_random') def get_topics_random(_, _info, amount=12): q = select(Topic) diff --git a/services/cache.py b/services/cache.py index 9ae1434e..64fca49b 100644 --- a/services/cache.py +++ b/services/cache.py @@ -166,21 +166,21 @@ def after_author_update(mapper, connection, author: Author): @event.listens_for(TopicFollower, 'after_insert') def after_topic_follower_insert(mapper, connection, target: TopicFollower): asyncio.create_task( - handle_topic_follower_change(connection, target.topic, target.follower, True) + handle_topic_follower_change(target.topic, target.follower, True) ) @event.listens_for(TopicFollower, 'after_delete') def after_topic_follower_delete(mapper, connection, target: TopicFollower): asyncio.create_task( - handle_topic_follower_change(connection, target.topic, target.follower, False) + handle_topic_follower_change(target.topic, target.follower, False) ) @event.listens_for(AuthorFollower, 'after_insert') def after_author_follower_insert(mapper, connection, target: AuthorFollower): asyncio.create_task( - handle_author_follower_change(connection, target.author, target.follower, True) + handle_author_follower_change(target.author, target.follower, True) ) @@ -224,9 +224,7 @@ async def handle_author_follower_change( ) -async def handle_topic_follower_change( - connection, topic_id: int, follower_id: int, is_insert: bool -): +async def handle_topic_follower_change(topic_id: int, follower_id: int, is_insert: bool): topic_query = select(Topic).filter(Topic.id == topic_id) [topic] = get_with_stat(topic_query) follower_query = select(Author).filter(Author.id == follower_id)