Ответ 2018-06-08 @ goloroden в wolkenkit slack
Я постараюсь объяснить это вам:Если вы хотите новый агрегат, вы опускаете идентификатор.Так, например, чтобы придерживаться примера чата, когда вы хотите отправить новое сообщение, вы делаете:
app.communication.message().send({ /* ... */ });
Если вместо этого вы хотите отредактировать существующее сообщение, напримересли вам это нравится, вам нужно указать идентификатор сообщения:
const messageId = '...';
app.communication.message(messageId).like({ /* ... */ });
В каждой команде вы, вероятно, захотите проверить, что она работает только с новым агрегатом (который мы называем конструктором ).команда ) или только для существующего агрегата.Самый простой способ проверить это - использовать функцию агрегата exists
, которая возвращает true
для новых агрегатов и false
в противном случае.Итак, внутри команды вы можете сделать что-то вроде этого:
const commands = {
send (message, command, mark) {
if (!message.exists()) {
return mark.asRejected('Aggregate does not exist yet.');
}
// ...
mark.asDone();
}
};
Если вы не хотите делать это каждый раз вручную, вы также можете использовать для этого промежуточное программное обеспечение, такое как https://github.com/thenativeweb/wolkenkit-command-tools… тогда предыдущий пример сводится к:
const { only } = require('wolkenkit-command-tools');
// ...
const commands = {
send: [
only.ifExists(),
(message, command, mark) {
// ...
mark.asDone();
}
]
};
Обратите внимание, что текущая версия этого модуля промежуточного программного обеспечения 3.0
, но до выпуска wolkenkit 2.0
у вас будетиспользовать версию 2.0
из wolkenkit-command-tools
.