mutation-fix
All checks were successful
deploy / deploy (push) Successful in 1m16s

This commit is contained in:
Untone 2023-11-17 11:51:15 +03:00
parent 31a8536d27
commit f33241b84f
2 changed files with 42 additions and 29 deletions

View File

@ -26,6 +26,13 @@ input ChatInput {
description: String description: String
} }
input MessageInput {
id: String!
chat_id: String!
body: String
seen: Boolean
}
type ChatResult { type ChatResult {
error: String error: String
chat: Chat chat: Chat
@ -39,11 +46,11 @@ type ChatResult {
type Mutation { type Mutation {
# inbox # inbox
createChat(title: String, members: [Int]!): ChatResult! createChat(title: String, members: [Int]!): ChatResult!
updateChat(chat_id: ChatInput!): ChatResult! updateChat(chat: ChatInput!): ChatResult!
deleteChat(chat_id: String!): ChatResult! deleteChat(chat_id: String!): ChatResult!
createMessage(chat_id: String!, body: String!, reply_to: Int): ChatResult! createMessage(chat_id: String!, body: String!, reply_to: Int): ChatResult!
updateMessage(chat_id: String!, message_id: Int!, body: String!): ChatResult! updateMessage(message: MessageInput!): ChatResult!
deleteMessage(chat_id: String!, message_id: Int!): ChatResult! deleteMessage(chat_id: String!, message_id: Int!): ChatResult!
markAsRead(chat_id: String!, message_id: Int!): ChatResult! markAsRead(chat_id: String!, message_id: Int!): ChatResult!
@ -69,27 +76,25 @@ type Query {
} }
type Message { type Message {
id: Int!
author: Int! author: Int!
created_at: Int!
chat_id: String! chat_id: String!
body: String! body: String!
created_at: Int!
id: Int!
reply_to: Int
updated_at: Int updated_at: Int
reply_to: Int
seen: Boolean seen: Boolean
} }
type Chat { type Chat {
id: String! id: String!
created_by: Int! # member_id
created_at: Int! created_at: Int!
created_by: Int!
updated_at: Int!
title: String
description: String
users: [Int]
members: [ChatMember] members: [ChatMember]
admins: [Int] admins: [Int]
updated_at: Int
title: String
description: String
messages: [Message] messages: [Message]
unread: Int unread: Int
private: Boolean
} }

View File

@ -78,32 +78,40 @@ async def create_message(_, info, chat_id: str, body: str, reply_to=None):
@mutation.field("updateMessage") @mutation.field("updateMessage")
@login_required @login_required
async def update_message(_, info, chat_id: str, message_id: int, body: str): async def update_message(_, info, message):
author_id = info.context["author_id"] author_id = info.context["author_id"]
chat_id = message.get("chat_id")
chat_str = ""
if chat_id:
chat_str = await redis.execute("GET", f"chats/{chat_id}")
if not chat_str:
return {"error": "chat not exist"}
chat_str = await redis.execute("GET", f"chats/{chat_id}") message_id = message.get("id")
if not chat_str: body = message.get("body")
return {"error": "chat not exist"}
message = await redis.execute("GET", f"chats/{chat_id}/messages/{message_id}") if message_id:
if not message: message = await redis.execute("GET", f"chats/{chat_id}/messages/{message_id}")
return {"error": "message not exist"} if not message:
return {"error": "message not exist"}
message = json.loads(message) message = json.loads(message)
if message["author"] != author_id: if message["author"] != author_id:
return {"error": "access denied"} return {"error": "access denied"}
message["body"] = body if body:
message["updated_at"] = int(datetime.now(tz=timezone.utc).timestamp()) message["body"] = body
message["updated_at"] = int(datetime.now(tz=timezone.utc).timestamp())
await redis.execute("SET", f"chats/{chat_id}/messages/{message_id}", json.dumps(message)) await redis.execute("SET", f"chats/{chat_id}/messages/{message_id}", json.dumps(message))
# Отправка уведомления
# Отправка уведомления message["chat_id"] = chat_id
message["chat_id"] = chat_id await notify_message(message, "update")
await notify_message(message, "update")
return {"message": message, "error": None} return { "message": message, "error": None }
else:
return { "message": message, "error": "cannot update, no message_id" }
@mutation.field("deleteMessage") @mutation.field("deleteMessage")