Как написать 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.

С помощью преобразователей конвейера вы можете создавать несколько функций, каждая из которых может использовать результаты предыдущей функции и запрашивать базу данных. Эти функции выполняются в указанном вами порядке.

Пример того, что вы можете сделать с распознавателем конвейера:

  1. Одна функция будет запрашивать базу данных группы чата
  2. Вторая функция будет использовать результаты группы чата для получения сообщений
  3. Объедините все результаты в один ответ graphQL, содержащий информацию о группе и сообщения

Вот документация для преобразователей конвейера: https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html

Другие вопросы по тегам