Я использую Sails и Waterline ORM с базой данных Mongo.
У меня есть две модели «Пользователь» и «Профиль» с отношением «один к одному».
Ниже приведен код, который я написал для транзакции с логикой отката. Я думаю, что может быть гораздо лучшая логика, чем эта, поскольку текущая логика очень неуклюжа.
Вопросы :
- Предоставляют ли Waterline или Sails какую-либо функциональность для отката?
Есть ли лучший способ сделать это?
User.create(newUser).then(function (data) {
var newProfile = {
displayName: data.name,
email: data.email,
user: data._id
}
return Profile.create(newProfile);
}).then(function (profileData) {
sails.log.info("Profile Data " + JSON.stringify(profileData));
// Update the user with Profile Info
User.update(newUser._id, {profile: profileData._id}).then(function (updatedUser) {
return updatedUser;
}, function (err) {
// TODO Rollback logic if the User Updation Fails
})
}, function (err) {
sails.log.error("Failed to Create Profile for the User . Deleting the created User");
var criteria = {
email: data.email
}
User.destroy(criteria).then(function (user) {
sails.log.error("Deleted the Created User " + JSON.stringify(user));
throw new Error("ERROR CREATING User");
}, function (err) {
sails.log.error("ERROR DELETING USER");
throw new Error("ERROR DELETING USER", err);
})
});