get messages from redis
This commit is contained in:
parent
ab42c3b60c
commit
3828e92c19
|
@ -60,20 +60,25 @@ async def create_chat(_, info, description):
|
||||||
|
|
||||||
return { "chatId" : chat_id }
|
return { "chatId" : chat_id }
|
||||||
|
|
||||||
@query.field("enterChat")
|
async def load_messages(chatId, size, page):
|
||||||
@login_required
|
message_ids = await redis.lrange(f"chats/{chatId}/message_ids",
|
||||||
async def enter_chat(_, info, chatId):
|
size * (page -1), size * page - 1)
|
||||||
chat = await redis.execute("GET", f"chats/{chatId}")
|
|
||||||
if not chat:
|
|
||||||
return { "error" : "chat not exist" }
|
|
||||||
chat = json.loads(chat)
|
|
||||||
|
|
||||||
message_ids = await redis.lrange(f"chats/{chatId}/message_ids", 0, 10)
|
|
||||||
messages = []
|
messages = []
|
||||||
if message_ids:
|
if message_ids:
|
||||||
message_keys = [f"chats/{chatId}/messages/{id.decode('UTF-8')}" for id in message_ids]
|
message_keys = [f"chats/{chatId}/messages/{id.decode('UTF-8')}" for id in message_ids]
|
||||||
messages = await redis.mget(*message_keys)
|
messages = await redis.mget(*message_keys)
|
||||||
messages = [json.loads(msg) for msg in messages]
|
messages = [json.loads(msg) for msg in messages]
|
||||||
|
return messages
|
||||||
|
|
||||||
|
@query.field("enterChat")
|
||||||
|
@login_required
|
||||||
|
async def enter_chat(_, info, chatId, size):
|
||||||
|
chat = await redis.execute("GET", f"chats/{chatId}")
|
||||||
|
if not chat:
|
||||||
|
return { "error" : "chat not exist" }
|
||||||
|
chat = json.loads(chat)
|
||||||
|
|
||||||
|
messages = await load_messages(chatId, size, 1)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"chat" : chat,
|
"chat" : chat,
|
||||||
|
@ -112,26 +117,15 @@ async def create_message(_, info, chatId, body, replyTo = None):
|
||||||
|
|
||||||
@query.field("getMessages")
|
@query.field("getMessages")
|
||||||
@login_required
|
@login_required
|
||||||
async def get_messages(_, info, count, page):
|
async def get_messages(_, info, chatId, size, page):
|
||||||
auth = info.context["request"].auth
|
chat = await redis.execute("GET", f"chats/{chatId}")
|
||||||
user_id = auth.user_id
|
if not chat:
|
||||||
|
return { "error" : "chat not exist" }
|
||||||
|
|
||||||
with local_session() as session:
|
messages = await load_messages(chatId, size, page)
|
||||||
messages = session.query(Message).filter(Message.author == user_id)
|
|
||||||
|
|
||||||
return messages
|
return messages
|
||||||
|
|
||||||
def check_and_get_message(message_id, user_id, session) :
|
|
||||||
message = session.query(Message).filter(Message.id == message_id).first()
|
|
||||||
|
|
||||||
if not message :
|
|
||||||
raise Exception("invalid id")
|
|
||||||
|
|
||||||
if message.author != user_id :
|
|
||||||
raise Exception("access denied")
|
|
||||||
|
|
||||||
return message
|
|
||||||
|
|
||||||
@mutation.field("updateMessage")
|
@mutation.field("updateMessage")
|
||||||
@login_required
|
@login_required
|
||||||
async def update_message(_, info, chatId, id, body):
|
async def update_message(_, info, chatId, id, body):
|
||||||
|
|
|
@ -167,7 +167,8 @@ type Query {
|
||||||
getUserRoles(slug: String!): [Role]!
|
getUserRoles(slug: String!): [Role]!
|
||||||
|
|
||||||
# messages
|
# messages
|
||||||
getMessages(count: Int = 100, page: Int = 1): [Message!]!
|
enterChat(chatId: String!, size: Int = 50): EnterChatResult!
|
||||||
|
getMessages(chatId: String!, size: Int!, page: Int!): [Message]!
|
||||||
|
|
||||||
# shouts
|
# shouts
|
||||||
getShoutBySlug(slug: String!): Shout!
|
getShoutBySlug(slug: String!): Shout!
|
||||||
|
@ -192,9 +193,6 @@ type Query {
|
||||||
# communities
|
# communities
|
||||||
getCommunity(slug: String): Community!
|
getCommunity(slug: String): Community!
|
||||||
getCommunities: [Community]!
|
getCommunities: [Community]!
|
||||||
|
|
||||||
#messages
|
|
||||||
enterChat(chatId: String!): EnterChatResult!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
############################################ Subscription
|
############################################ Subscription
|
||||||
|
|
Loading…
Reference in New Issue
Block a user