Я использую AWS AppSync для приложения чата в одном из моих приложений. Мы можем успешно выполнить настройку и базовый запрос.
В одном из случаев мне нужно написать индивидуальный запрос GraphQL, чтобы я мог иметь дополнительные данные, используя ссылку одного типа из другого. Например, я могу получить allMessageGroup от пользователя, а также allMessages от определенной группы.
Теперь я хочу добавить последнее сообщение в группе и его отправителя со списком всей группы сообщений, точно так же, как на домашней странице приложения.
Но я не могу понять, как сделать JOIN или написать такой запрос, который дает смешанные результаты на основе Conversation / Message / User types / table.
Платформа: 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
}
}
}
}
}
}
Я хочу получить результат больше, чем я, он может быть основан на условном, например, получить список всех чат-групп, а также добавить последнее сообщение в группу с подробностями группы, которые доступны в разговоре / группе весь список сообщений
Можете показать свои резолверы? Graphql - это просто способ определения границ и типов. Он не говорит, как запрашивать или хранить данные.
Вы поняли это? Я столкнулся с той же проблемой: я могу получить объект me в запросе iOS, а затем во всех userConversations, но я не могу пройти через userConversations, чтобы найти все фактические разговоры.





Похоже, вам нужно несколько запросов к одному или нескольким источникам данных для выполнения этого запроса graphQL. В этом случае вы можете использовать функцию AppSync преобразователь конвейера.
С помощью преобразователи трубопроводов вы можете создать несколько функции, каждый из которых может использовать результаты предыдущей функции и запрашивать базу данных. Эти функции выполняются в указанном вами порядке.
Пример того, что вы могли бы сделать с преобразователем конвейера:
Вот документация для преобразователи конвейера:https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html
Нет необходимости использовать конвейерные преобразователи, этот запрос используется в качестве примера в приложении чата appsync, которое также не использует конвейерные преобразователи. Пример
Другой способ запроса нескольких источников данных - установка вложенных преобразователей. Это метод, используемый приложением чата.
Спасибо за ответ. В этом есть смысл, если бы я мог быстро воспроизвести тот же запрос из приложения чата, как это можно было бы сделать? Это проблема, с которой я столкнулся, здесь.
Вы добавляете 1) преобразователь в сам запрос, 2) преобразователь в подполя типа возвращаемого запроса. В вашем примере есть преобразователь для запроса «я». Запрос «я» возвращает тип «Пользователь», и есть несколько преобразователей для полей типа «Пользователь». Следовательно, когда вы запускаете запрос «я», преобразователь «я» будет работать первым, а затем преобразователь «User.conversations» будет запускаться вторым, с вводом от преобразователя «я». Вот резолверы, используемые в этом примере: Резольверы
Я полностью понимаю, но когда я генерирую код с помощью ampify для swift, он почему-то не генерирует поля для associated: [UserConversations]. Таким образом, даже несмотря на то, что мои преобразователи настроены точно так же, как приложение чата, на типе UserConversations в первую очередь нет подполя, к которому нужно было бы получить доступ. Здесь - это генерация кода для Swift, о котором я говорю. Как видите, нет возможности связаться со мной через UserConversations.
У меня есть установочные преобразователи на UserConversations, но я не могу связаться с ними в быстром коде. Это проблема.
Я хочу помочь, но это почти неразборчиво. Вы хотите сказать, что хотите вернуть больше, чем просто
meиз вашего запроса? СОЕДИНЕНИЯ не обрабатываются GraphQL, это могут обрабатывать преобразователи.