From c89d226dee2edabfc5de08ed7d091468bcb4341b Mon Sep 17 00:00:00 2001 From: tonyrewin Date: Tue, 6 Dec 2022 11:44:29 +0300 Subject: [PATCH] loadchats-fix+sse --- main.py | 4 ++-- resolvers/inbox/chats.py | 17 ++++++++++++++--- resolvers/zine/profile.py | 2 +- services/inbox/sse.py | 9 +++++++++ 4 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 services/inbox/sse.py diff --git a/main.py b/main.py index c9d5ff2a..fdb0b4ca 100644 --- a/main.py +++ b/main.py @@ -21,7 +21,7 @@ from services.zine.gittask import GitTask from settings import DEV_SERVER_STATUS_FILE_NAME, SENTRY_DSN from ariadne.asgi.handlers import GraphQLTransportWSHandler from services.inbox.presence import on_connect, on_disconnect -# from services.inbox.sse import sse_messages +from services.inbox.sse import sse_messages import_module("resolvers") @@ -68,7 +68,7 @@ routes = [ Route("/oauth/{provider}", endpoint=oauth_login), Route("/oauth-authorize", endpoint=oauth_authorize), Route("/confirm/{token}", endpoint=confirm_email_handler), - # Route("/chat/{chat_id}", endpoint=sse_messages) + Route("/messages", endpoint=sse_messages) ] app = Starlette( diff --git a/resolvers/inbox/chats.py b/resolvers/inbox/chats.py index 2a953a12..56e80423 100644 --- a/resolvers/inbox/chats.py +++ b/resolvers/inbox/chats.py @@ -57,14 +57,25 @@ async def create_chat(_, info, title="", members=[]): # reuse chat craeted before if exists if len(members) == 2 and title == "": - chats1 = await redis.execute("SMEMBERS", f"chats_by_user/{members[0]}") - chats2 = await redis.execute("SMEMBERS", f"chats_by_user/{members[1]}") chat = None - for c in chats1.intersection(chats2): + print(members) + chatset1 = await redis.execute("SMEMBERS", f"chats_by_user/{members[0]}") + if not chatset1: + chatset1 = set([]) + print(chatset1) + chatset2 = await redis.execute("SMEMBERS", f"chats_by_user/{members[1]}") + if not chatset2: + chatset2 = set([]) + print(chatset2) + chatset = chatset1.intersection(chatset2) + print(chatset) + for c in chatset: chat = await redis.execute("GET", f"chats/{c.decode('utf-8')}") if chat: chat = json.loads(chat) if chat['title'] == "": + print('[inbox] craeteChat found old chat') + print(chat) break if chat: return { diff --git a/resolvers/zine/profile.py b/resolvers/zine/profile.py index b8d3e1ac..609ccccd 100644 --- a/resolvers/zine/profile.py +++ b/resolvers/zine/profile.py @@ -41,7 +41,7 @@ def add_author_stat_columns(q): # func.sum(user_rating_aliased.value).label('rating_stat') # ) - q = q.add_columns(literal(0).label('commented_stat')) + # q = q.add_columns(literal(0).label('commented_stat')) q = q.outerjoin(Reaction, and_(Reaction.createdBy == User.id, Reaction.body.is_not(None))).add_columns( func.count(distinct(Reaction.id)).label('commented_stat') ) diff --git a/services/inbox/sse.py b/services/inbox/sse.py new file mode 100644 index 00000000..32e4b8b9 --- /dev/null +++ b/services/inbox/sse.py @@ -0,0 +1,9 @@ +from sse_starlette.sse import EventSourceResponse +from resolvers.inbox.messages import message_generator + + +async def sse_messages(request): + print(f'[SSE] {request}') + # https://github.com/enisdenjo/graphql-sse/blob/master/PROTOCOL.md + + return EventSourceResponse(message_generator)