Невозможно сделать мутацию со свойством типа «массив объектов» в Apollo - PullRequest
0 голосов
/ 05 ноября 2018

Я новичок во всем мире Graphql, так что это может быть очень простой вопрос, извините

Я использую graphql-compose-mongoose для генерации моей схемы graphql, вот моя схема mongoose:

const ComplainSchema = new Schema({
    entityId: {type: String, required: true},
    user: {type: UserInfoSchema, required: true},
    title: String, // standard types
    desc: String,
    state: {required: true, type: String, enum: ["DRAFT", "MODERATION", "PUBLIC", "SOLVED"]},
    attachments: [{
        url: {type: String, required: true},
        name: String,
        mimeType: String,
        attachmentId: Schema.Types.ObjectId
    }],

    createdAt: {type: Date, index: true},
    updatedAt: {type: Date, index: true},

}, {timestamps: {}})
export default mongoose.model('Complaint', ComplainSchema)

Если я попытаюсь выполнить следующую мутацию в graphiql, она будет работать нормально

mutation {
  complaintUpdateById(record:{_id:"5bdd9350fe144227042e6a20", title:"ok", desc:"updated", attachments:[{name:"zied", url:"http://zied.com"}]}){
        recordId, 
        record{
            _id, 
                entityId,
                user {
                    userId,
                    userName,
                    roleInShop
                },
                title,
                desc,
                createdAt,
                updatedAt,
        attachments{
            name,
            url
        }
            }
        }

}

и возвращает это (в случае, если будет полезно увидеть ответ)

{
  "data": {
    "complaintUpdateById": {
      "recordId": "5bdd9350fe144227042e6a20",
      "record": {
        "_id": "5bdd9350fe144227042e6a20",
        "entityId": "5bd9b1858788f51f44ab678a",
        "user": {
          "userId": "5bd9ac078788f51f44ab6785",
          "userName": "Zied Hamdi",
          "roleInShop": "ASA"
        },
        "title": "ok",
        "desc": "updated",
        "createdAt": "2018-11-03T12:23:44.565Z",
        "updatedAt": "2018-11-05T09:02:51.494Z",
        "attachments": [
          {
            "name": "zied",
            "url": "http://zied.com"
          }
        ]
      }
    }
  }
}

Теперь, если я попытаюсь передать вложения в apollo, я не знаю, как это сделать, я не знаю, какой тип предоставить ( Вложение - это не тот тип, который явно указан):

const UPDATE_COMPLAINT = gql `mutation complaintUpdateById($_id:MongoID!, $title: String!, $desc: String!, $attachments: [Attachment]
        )
    {
    complaintUpdateById(record:{_id:$_id, title:$title, desc:$desc, attachments:$attachments}){
        recordId, 
        record{
            _id, 
                entityId,
                user {
                    userId,
                    userName,
                    roleInShop
                },
                title,
                desc,
                createdAt,
                updatedAt
            }
        }
  }`

Итак, в поисках нужного типа, я сделал самоанализ своего объекта, проблема в том, что я получил тип вложения как нулевой для этого запроса:

{
  __type(name: "Complaint") {
    kind
    name
    fields {
      name
      description
      type {
        name
      }
    }
  }
}

это ответ:

{
  "data": {
    "__type": {
      "kind": "OBJECT",
      "name": "Complaint",
      "fields": [
        {
          "name": "entityId",
          "description": null,
          "type": {
            "name": "String"
          }
        },
        {
          "name": "user",
          "description": null,
          "type": {
            "name": "ComplaintUser"
          }
        },
        {
          "name": "title",
          "description": null,
          "type": {
            "name": "String"
          }
        },
        {
          "name": "desc",
          "description": null,
          "type": {
            "name": "String"
          }
        },
        {
          "name": "state",
          "description": null,
          "type": {
            "name": "EnumComplaintState"
          }
        },
        {
          "name": "attachments",
          "description": null,
          "type": {
            "name": null
          }
        },
        {
          "name": "createdAt",
          "description": null,
          "type": {
            "name": "Date"
          }
        },
        {
          "name": "updatedAt",
          "description": null,
          "type": {
            "name": "Date"
          }
        },
        {
          "name": "_id",
          "description": null,
          "type": {
            "name": null
          }
        }
      ]
    }
  }
}

поиск в Google не помог, так как я не знаю, как вызывается эта операция, я не думаю, что это вложенная мутация из того, что я нашел ...

1 Ответ

0 голосов
/ 05 ноября 2018

исправлено,

Я сделал эти шаги:

Сначала я проанализировал тип вложения в обычном запросе с помощью ключевого слова __typename: как показано ниже

mutation {
  complaintUpdateById(record:{_id:"5bdd9350fe144227042e6a20", title:"ok", desc:"updated", attachments:[{name:"zied", url:"http://zied.com"}]}){
        recordId, 
        record{
            _id, 
                entityId,
                user {
                    userId,
                    userName,
                    roleInShop
                },
                title,
                desc,
                createdAt,
                updatedAt,
        attachments{
          __typename,
            name,
            url
        }
            }
        }

}

он обнаружил тип с именем ComplaintAttachments

при замене типа вложения новым значением ComplaintAttachments произошла ошибка, и это сообщение об ошибке выручило меня:

Переменная «$ attachments» типа «[ComplaintAttachments]», используемая в тип ожидающей позиции "[ComplaintComplaintAttachmentsInput]"

так что массив имеет тип ComplaintComplaintAttachmentsInput, я до сих пор не знаю, как его проанализировать напрямую, но я уже доволен результатом:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...