aws graphql @connection не возвращает массив, как ожидалось?

У меня есть модель graphql следующим образом (у пользователя может быть много сообщений 1:m)

type User @model {
  id: ID!
  fullName: String!
  emailAddress: String!
  posts: [Post] @connection(name: "UserPostConnection")
}

type Post @model {
  id: ID!
  text: String!
  user: User @connection(name: "UserPostConnection")
  createdAt: String
  updatedAt: String
}

Я пытаюсь вернуть все сообщения для конкретного пользователя, вот так:

let queryInput = GetUserQuery(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549")

appSyncClient?.fetch(query: queryInput, cachePolicy: .fetchIgnoringCacheData) { (result, error) in
            print(result?.data?.getUser?.posts)
        }
}        

Однако результат не возвращает массив, он возвращает необязательный параметр:

Optional(AWSStackSocial.GetUserQuery.Data.GetUser.Post(snapshot: ["__typename": Optional("ModelPostConnection"), "nextToken": nil]))

Я подтвердил, что а) пользователь существует; б) сообщения также существуют.

В AWS:

query {
    getUser(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549") {
      id 
    posts {
      items {
        id
      }
    }
    }
}

Выход:

{
  "data": {
    "getUser": {
      "id": "879db4f2-1dad-47b9-b70d-8bca15bf2549",
      "posts": {
        "items": [
          {
            "id": "04c4b571-6e92-4745-9a40-1a67a9d49d77"
          },
          {
            "id": "0f44fe6e-4e15-4a8c-b591-555e8fa1f60e"
          },
          {
            "id": "60c18c40-fea3-4ff3-8b21-df6857703dd2"
          }
        ]
      }
    }
  }
}

2 ответа

Решение

Я нашел ответ. Уровень глубины по умолчанию для усиления GraphQL равен 2, поэтому его нужно было изменить на 3. Это можно сделать, изменив максимальную глубину:

amplify codegen configure

Все, что есть в вашей модели, не имеет необходимого суффикса (!) по определению является необязательным, независимо от того, существует он или нет. Вы должны остерегаться этогоnilпотому что он определен так, что может бытьnil. Если вы являетесь владельцем модели, вы можете изменить те, которые потребуются (я не предлагаю этого!). В противном случае вам просто придется разворачивать вещи, когда вы их обрабатываете.

guard let user = result?.data?.getUser, let posts = user.posts else { throw NoPostsError }
Другие вопросы по тегам