Я пытался найти некоторую документацию по этому вопросу на веб-сайтах Prisma, но, честно говоря, там довольно сложно найти очень подробные примеры использования, особенно когда проблему описать так же сложно, как этот.
У меня есть ситуация, когда мой интерфейс отправляет запрос мутации на createPosting
на моем сервере GraphQL-Yoga с полями positionTitle, employmentType, description, requirements, customId, expiresAt
(я тщательно проверил, что это работает, как и ожидалось). Я хочу добавить поле createdAt
перед созданием узла в службе Prisma.
На моем сервере GraphQL-Yoga есть datamodel.graphql, который включает в себя следующее:
type Posting {
id: ID! @unique
customId: String! @unique
offeredBy: Employer!
postingTitle: String!
positionTitle: String!
employmentType: EmploymentType!
status: PostingStatus!
description: String
requirements: String
applications: [Application!]!
createdAt: DateTime!
expiresAt: DateTime!
}
В моем schema.graphql это есть в разделе Мутации:
createPosting(postingTitle: String!,
positionTitle: String!,
employmentType: String!,
description: String!,
requirements: String!,
customId: String!,
expiresAt: DateTime!,
status: PostingStatus): Posting!
Наконец, в моем преобразователе createPosting я пытаюсь изменить бэкэнд Prisma следующим образом:
const result = await context.prisma.mutation.createPosting({
data: {
offeredBy: { connect: { name: context.req.name} },
postingTitle: args.postingTitle,
positionTitle: args.positionTitle,
employmentType: args.employmentType,
description: args.description,
requirements: args.requirements,
customId: args.customId,
createdAt: new Date().toISOString(),
expiresAt: expiresAt,
status: args.status || 'UPCOMING'
}
})
Когда я пытаюсь запустить это из моего интерфейса, на сервере появляется следующая ошибка:
Error: Variable '$_v0_data' expected value of type 'PostingCreateInput!' but got: {"customId":"dwa","postingTitle":"da","positionTitle":"da","employmentType":"PART_TIME","status":"UPCOMING","description":"dada","requirements":"dadada","expiresAt":"2018-09-27T00:00:00.000Z","createdAt":"2018-09-04T20:29:10.745Z","offeredBy":{"connect":{"name":"NSB"}}}. Reason: 'createdAt' Field 'createdAt' is not defined in the input type 'PostingCreateInput'.
Из этого сообщения об ошибке я бы предположил, что мой сервис Prisma по какой-то причине не знает о createAt, так как я недавно добавил это поле, но когда я проверяю тип Posting и PostingCreateInput на площадке GraphQL на хосте Prisma, я нахожу поле создано на! в обоих этих местах.
Я попытался удалить созданный файл prisma.graphql и снова развернуть его для нового файла, но это не сработало. И когда я проверял prisma.graphql, PostingCreateInput действительно пропустил поле createAt, хотя, кажется, оно есть на сервере Prisma.
Если кто-то может указать мне правильное направление относительно того, что не так, или дать мне лучшее представление о том, как настроить переменные, которые должны храниться в базе данных, но создаваться на моем сервере йоги, а не в конец я был бы очень благодарен :) 1026 *
Хотя этот вопрос может показаться немного конкретным, я считаю, что идея создания данных для полей во время на сервере должна быть возможной до создания узлов, но в данный момент я пытаюсь обдумать, как это сделать.
TLDR; Хотите создать поле createdAt:DateTime
на моем сервере GraphQL-Yoga в резольвере, прежде чем отправлять запрос на создание в службу Prisma.