Допустим, у вас есть эта User
модель:
const User = Model({
name: String,
email: String,
isDeleted: false
})
и Subscription
модель:
const Subscription = Model({
userId: 'User', // references User model above
amount: Number
})
Теперь, когда вы удаляете пользователя и, следовательно, соответствующую запись подписки, это Вот как вы бы поступили в модели User:
Route.delete('/user/:id', function(req, res) => {
let user = null; // for record keeping
let subscription = null;
Transaction.start(async () => {
user = await User.findByIdAndDelete(req.params.id);
subscription = await Subscription.findAndDelete({ userId: user.id });
});
Transaction.error(() => {
// resotre user & subscription
})
})
Таким образом, вам не нужно вызывать контроллер из другого контроллера и бизнес-логи c также находится в моделях.
Примечание : Transaction
- это фиктивная библиотека.