У меня есть тип модели данных, например
type XYZ {
id: ID!
relatedTable: ABC
someValue: String
}
Часть Graphql:
const createXYZ = gql`
mutation createXYZ(
relatedTableId: ID
someValue: String
) {
createXYZ(
data: {
relatedTableId: $relatedTableId
someValue: $someValue
}
) { ... }
`
const updateXYZ = gql`
mutation updateXYZ(
id: ID!
relatedTableId: ID
someValue: String
) {
updateXYZ(
data: {
relatedTableId: $relatedTableId
someValue: $someValue
},
where: { id: $id }
) { ... }
`
Из forntend я создаю XYZ-запись с более или менее похожей мутацией:
createXYZ(variables: {
relatedTableId: 1,
someValue: 'cde'
})
на стороне сервера:
createXYZ: async (obj, args, context, info) => {
return prisma.createXYZ({
data: {
relatedTable: { connect: { id: args.data.relatedTableId } },
someValue: args.data.someValue
}
})
}
Обновление на стороне интерфейса выглядит аналогично созданию
updateXYZ(variables: {
id: 2,
relatedTableId: 1,
someValue: 'cde'
})
На стороне сервера, чтобы предотвратить обновление полей с тем же значение, которое мне нужно, чтобы получить первую запись XYZ и сравнить перед обновлением:
updateXYZ: async (obj, args, context, info) => {
const currentXYZ = await prisma.XYZ({ where: args.where })
return prisma.updateXYZ({
data: {
relatedTable: currentXYZ.relatedTable.id !== args.data.relatedTableId
? { connect: { id: args.data.relatedTableId } }
: undefined,
someValue: currentXYZ.someValue !== args.data.someValue
? args.data.someValue
: undefined
},
where: args.where
})
}
Есть ли у Prisma какой-либо автоматический c способ определения того, совпадает ли полученное значение поля с текущим значением поля или выбирает и Сравнение значений единственное решение этой проблемы?