HeapTableRepo.updateMaybe

Нестрогая версия update. Редактирует заданные поля верхнего уровня в записи heap-таблицы с заданным ID.

Новые значения полей валидируются на сооветствие схеме таблицы.

Метод является "нестрогим" - если записи с заданным ID нет в таблице, то возвращается null.

Применение/сигнатура

table.updateMaybe(ctx, idAndFieldsToUpdate)
  • Аргументы
    • ctx*: app.Ctx
      Контекст запроса. Используется для внутренней реализации, сохранении информации о пользователе, изменившем запись, а также позволяет выполнить запрос в нужной транзакции.

    • idAndFieldsToUpdate: { id: string, ... }\

      Объект с идентификатором записи, которую нужно изменить и новыми значениями полей.

      Обязательным является только поле id. Вместе с ним нужно указать только те поля, значения которых требуется измененить. Названия и значения переданных полей должны соответствовать схеме heap-таблицы.

      В отличие от операции create, тут НЕ действуют значения по умолчанию даже для вложенных объектов, т.е. если необходимо изменить вложенный объект, то его нужно передать полностью со всеми заполненными полями (можно не передать Optional-поле, если действительно нужно сбросить его значение в undefined, а не сохранить старое).

      Если Optional-полю передать значение null, то оно будет сброшено в undefined. Это специальное исключение для Optional-полей, поскольку значение undefined означает "ничего не делать" и не позволяет сбросить значение поля.

  • Возвращаемое значение: Promise<HeapObject>
    • Только что изменённый heap-объект, либо null, если записи с таким ID не было.

Примеры


Простое изменение поля с обработкой случая несуществующей записи

const Tasks = Heap.Table('tasks', {
  title: Heap.String(),
  priority: Heap.NonRequired(Heap.Integer(), 3),
})

const updatedTask = await Tasks.updateMaybe(ctx, { id: req.params.id, priority: 0 })
if (!updatedTask) { 
  throw `task ${req.params.id} not found!`
}

Сброс Optional-поля description

const Tasks = Heap.Table('tasks', {
  title: Heap.String(),
  description: Heap.Optional(Heap.String()),
})
const newTask = await Tasks.create(ctx, {
  title: 'Позвонить клиенту',
  description: 'Описание',
})
/* {
     title: 'Позвонить клиенту',
     description: 'Описание',
   } */

const updatedTask = await Tasks.updateMaybe(ctx, { id: newTask.id, description: null })
/* {
     title: 'Позвонить клиенту',
   } */

Демонстрация поведения Optional-поля при изменении вложенного объекта

const Tasks = Heap.Table('tasks', {
  title: Heap.String(),
  customerInfo: Heap.Optional(Heap.Object({
    name: Heap.String(),
    email: Heap.Optional(Heap.String({ format: 'email' })),
  })),
})
const newTask = await Tasks.create(ctx, {
  title: 'Позвонить клиенту',
  customerInfo: {,
    name: 'Иван Петров',
    email: 'ivan@example.com',
  },
})
/* {
     title: 'Позвонить клиенту',
     customerInfo: {,
       name: 'Иван Петров',
       email: 'ivan@example.com',
     },
   } */

const updatedTask = await Tasks.updateMaybe(ctx, {
  id: newTask.id,
  customerInfo: {,
    name: 'Иван Петров',
  },
})
/* {
     title: 'Позвонить клиенту',
     customerInfo: {,
       name: 'Иван Петров',
     },
   } */

❤️ Made with love on Chatium

ООО "Чатиум"

Информация о компании