Нестрогая версия 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>
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!`
}
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: 'Позвонить клиенту',
} */
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: 'Иван Петров',
},
} */