Запретить обновление полей с одинаковым значением в Prisma - PullRequest
0 голосов
/ 20 января 2020

У меня есть тип модели данных, например

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 способ определения того, совпадает ли полученное значение поля с текущим значением поля или выбирает и Сравнение значений единственное решение этой проблемы?

...