Как написать JOIN в GraphQL или получить результат из нескольких типов - приложение AWS синхронизирует iOS
Я использую AWS AppSync для приложения чата в одном из моих приложений. Мы можем успешно выполнить настройку и базовый запрос.
В одном случае мне нужно написать пользовательский запрос GraphQL, чтобы я мог получить дополнительные данные, используя ссылки одного типа из другого. Например, я могу иметь allMessageGroup
от пользователя, а также allMessages
из определенной группы.
Теперь я хочу добавить последнее сообщение в группу и его отправителя со списком всех групп сообщений, как на домашней странице приложения.
Но я не могу понять, как создать JOIN или написать такой запрос, который дает смешанные результаты на основе таблицы разговоров / сообщений / типов пользователей / таблиц.
Платформа:iOS Язык: Swift
Ниже приведены моя схема и API/ запрос, который я использую.
схема
type Conversation {
conversation_cover_pic: String
conversation_type: String!
createdAt: String
id: ID!
messages(after: String, first: Int): MessageConnection
name: String!
privacy: String
}
type Message {
author: User
content: String!
conversationId: ID!
createdAt: String
id: ID!
recipient: User
sender: String
}
type MessageConnection {
messages: [Message]
nextToken: String
}
запрос
query getUserConversationConnectionThroughUser($after: String, $first: Int)
{
me
{
id
__typename
conversations(first: $first, after: $after)
{
__typename
nextToken
userConversations
{
__typename
userId
conversationId
associated
{
__typename
userId
}
conversation
{
__typename
id
name
privacy
messages
{
__typename
id
conversationId
content
createdAt
sender
isSent
}
}
}
}
}
}
1 ответ
Похоже, вам нужно несколько запросов к одному или нескольким источникам данных для выполнения этого запроса GraphQL. В этом случае вы можете использовать функцию распознавания конвейера в AppSync.
С помощью преобразователей конвейера вы можете создавать несколько функций, каждая из которых может использовать результаты предыдущей функции и запрашивать базу данных. Эти функции выполняются в указанном вами порядке.
Пример того, что вы можете сделать с распознавателем конвейера:
- Одна функция будет запрашивать базу данных группы чата
- Вторая функция будет использовать результаты группы чата для получения сообщений
- Объедините все результаты в один ответ graphQL, содержащий информацию о группе и сообщения
Вот документация для преобразователей конвейера: https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html