Я запутался в том, как правильно создать 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),
}),
},
По-моему, это становится сложным для библиотеки, котораядолжен писать меньше кода проводки: я уверен, что делаю это неправильно ...
С уважением,