AppSync GraphQL @connection query - PullRequest
       60

AppSync GraphQL @connection query

1 голос
/ 22 октября 2019

У меня есть тип graphql с подключением «один ко многим» к другому типу. Я хочу отфильтровать многие, используя один. Таким образом, Amplify сгенерировал схему graphql, но во входных данных для запроса списка нет значения для используемого подключения.

Тип:

type Event @model @auth(rules: [{ allow: owner }]) {
  id: ID!
  name: String!
  date: AWSDateTime!
  user: User! @connection(name: "EventsUser", sortField: "date")
  isDeleted: Boolean!
}

Запрос:

type Query {
  listEvents(filter: ModelEventFilterInput, limit: Int, nextToken: String): modelEventConnection

Ввод запроса списка

input ModelEventFilterInput {
  id: ModelIDFilterInput
  name: ModelStringFilterInput
  date: ModelStringFilterInput
  isDeleted: ModelBooleanFilterInput
  and: [ModelEventFilterInput]
  or: [ModelEventFilterInput]
  not: ModelEventFilterInput
}

Я попытался передать идентификатор в объекте переменных, используя:

    variables: {
        filter: {
            eventUserId: {
                eq: props.id,
            },

, где eventUserId - имя поля, сгенерированное при помощи ampify ииспользуется в таблице DynamoDB, но это не сработало. Как вы фильтруете на основе этого значения? Нужно ли писать это вручную?

Адам

Редактировать

У меня есть кое-что из этого выяснено. Я добавил:

eventUserId: ModelEventUserInput

, где ModelEventUserInput равен

input ModelEventUserInput {
    eq: ID
}

к входу ModelEventFilterInput, а затем я использую:

variables: {
    filter: {
        eventUserId: {
            eq: props.id,
        },

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

this.props.subscribeToEvents(
      buildSubscription({
        query: gql(onCreateEvent),
        variables: {
          owner,
          filter: {
            eventUserId: {
              eq: id,
            },
            isDeleted: {
              eq: false,
            },
          }
        },
      }, gql(listEvents))
    );

, но безуспешно. Как можно добиться этой фильтрации по подписке?

Адам

...