HeapTableRepo.update

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

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

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

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

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

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

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

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

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

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

  • Возвращаемое значение: Promise<HeapObject>

Примеры


Простое изменение поля priority

const Tasks = Heap.Table('tasks', {
  title: Heap.String(),
  priority: Heap.NonRequired(Heap.Integer(), 3),
})
const newTask = await Tasks.create(ctx, { title: 'Позвонить клиенту' })
/* {
     title: 'Позвонить клиенту',
     priority: 3,
   } */

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

Сброс 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.update(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.update(ctx, {
  id: newTask.id,
  customerInfo: {,
    name: 'Иван Петров',
  },
})
/* {
     title: 'Позвонить клиенту',
     customerInfo: {,
       name: 'Иван Петров',
     },
   } */

❤️ Made with love on Chatium

ООО "Чатиум"

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