Неизвестный аргумент «запись» в поле типа «Мутация» (graphql-compose) - PullRequest
0 голосов
/ 23 октября 2018

Я запутался в том, как правильно создать Resolver в graphql-compose: у меня есть две связанные сущности: entityGroup и entity.Я хочу создавать сущность по умолчанию каждый раз, когда создается entityGroup: поэтому мне нужно вызвать метод разрешения EntityGroup.createOne , а затем использовать идентификатор этого результата для вызова "Entity.createOne"

Это код, который я написал до сих пор:

import { composeWithMongoose } from 'graphql-compose-mongoose';
import { schemaComposer } from 'graphql-compose';

import {Resolver} from 'graphql-compose'

const customizationOptions = {}; // left it empty for simplicity, described below

const EntityTC = composeWithMongoose(Entity, customizationOptions)
const EntityGroupTC = composeWithMongoose(EntityGroup, customizationOptions)

const entityGroupCreate = new Resolver({

    name: 'entityGroupCreate',
    type: EntityGroupTC,
    args: {
        name: 'String!',
    },
    resolve: async ({ source, args, context, info }) => {
        const created = await EntityGroupTC.getResolver('createOne').resolve({ source, args, context, info })
        console.log("created entity : ", created)
        return created
    }
});


schemaComposer.rootMutation().addFields({
    entityGroupCreate,
}

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

schemaComposer.rootMutation().addFields({
    entityGroupCreate: EntityGroupTC.getResolver('createOne'),
}

Моя проблема в том, что все работает нормально для предопределенного преобразователя, но с моим описанным выше преобразователем я получаю эту ошибку:

graphQl error: неизвестный аргумент "запись" в поле "entityGroupCreate"типа "Мутация".Ошибка graphQl: невозможно запросить поле «recordId» для типа «EntityGroup».Ошибка graphQl: невозможно запросить поле «запись» по типу «EntityGroup».Ошибка graphQl: поле "entityGroupCreate" аргумент "name" типа "String!"требуется, но не предоставляется.

это мой запрос

const ADD_COMPLAINT = gql`mutation complaintCreate($entityId:String!, $title: String!, $desc: String!)
    {
    complaintCreate(record:{entityId:$entityId, title:$title, desc:$desc}){
        recordId, 
        record{
            _id, 
                entityId,
                user {
                    userId,
                    userName,
                    roleInShop
                },
                title,
                desc,
                createdAt,
                updatedAt
            }
        }
  }`

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

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

const outputType = EntityGroupTC.constructor.schemaComposer.getOrCreateTC("entityGroupCreate", t => {
    t.addFields({
        recordId: {
            type: 'MongoID',
            description: 'Created document ID',
        },
        record: {
            type: EntityGroupTC,
            description: 'Created document',
        },
    });
});

но у меня все еще есть эти ошибки

ошибка graphQl: неизвестный аргумент "запись" в поле "entityGroupCreate" типа "Mutation".Ошибка graphQl: поле "entityGroupCreate" аргумент "name" типа "String!"требуется, но не предоставляется.

Поэтому я должен понять, как работает эта часть: https://github.com/graphql-compose/graphql-compose-mongoose/blob/master/src/resolvers/createOne.js:42

args: {
      ...recordHelperArgs(tc, {
        recordTypeName: `CreateOne${tc.getTypeName()}Input`,
        removeFields: ['id', '_id'],
        isRequired: true,
        ...(opts && opts.record),
      }),
    },

По-моему, это становится сложным для библиотеки, котораядолжен писать меньше кода проводки: я уверен, что делаю это неправильно ...

С уважением,

1 Ответ

0 голосов
/ 23 октября 2018

Хорошо, решение было прямо передо мной: /, это конец дня синдром

const createOneResolver = EntityGroupTC.getResolver('createOne')

const entityGroupCreate = new Resolver({
    name: 'entityGroupCreate',
    type: createOneResolver.type,
    args: createOneResolver.args,
    resolve: async ({ source, args, context, info }) => {
        const created = await createOneResolver.resolve({ source, args, context, info })
        console.log("created entity : ", created)
        return created
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...