Как написать JOIN в GraphQL или получить результат из нескольких типов - приложение AWS синхронизирует iOS - PullRequest
0 голосов
/ 02 января 2019

Я использую 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 Ответ

0 голосов
/ 04 января 2019

Похоже, вам нужно несколько запросов к одному или нескольким источникам данных для выполнения этого запроса GraphQL.В этом случае вы можете использовать функцию конвейерного распознавателя в AppSync.

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

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

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

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

...