#javascript #node.js #sequelize.js
Вопрос:
У меня есть простая таблица пользователей в Postgres, которая выглядит так:
Column | Type |
----------- -----------------------------
id | integer |
name | text |
email | text |
nickname | text |
deletedAt | timestamp without time zone |
Indexes:
"user_pkey" PRIMARY KEY, btree (id)
"unique_user" UNIQUE CONSTRAINT, btree (name, email)
Когда я получаю запрос на свой API с данными пользователей, я хочу создать новых пользователей. Если пользователь мягко удален, то я хотел бы их восстановить, а если пользователь уже существует, то ничего не делайте.
const users = [];
_.each(req.body.users, (user) => {
const u = Users.findOrCreate({
where: {
name: user.name,
email: user.email
},
defaults: {
name: user.name,
email: user.email,
nickname: user.nickname
},
paranoid: false,
transaction
}).spread(async (returnedUser, created) => {
if (!created) {
if (returnedUser.deletedAt) {
await returnedUser.update({ deletedAt: null, transaction });
await returnedUser.save({ transaction });
}
}
})
users.push(u);
});
Кажется, что все это работает, за исключением части восстановления. Похоже, что ошибка не возникает, но соответствующий пользователь, удаленный с помощью программного обеспечения, остается удаленным. Я использую sequelize 5.
Комментарии:
1. С тех пор sequelize.js функции/методы могут сильно отличаться от версии к версии, пожалуйста, укажите, какая версия sequelize.js вы используете
2. В части обновления есть проблема. Во-первых,
transaction
это должно быть частью опций, а не значениями дляreturnedUser.update
. Правильный синтаксис был бы такимawait returnedUser.update({ deletedAt: null}, {transaction});
. Во-вторых, вызов сохранения является избыточным, если вы обновляете экземпляр, вызывающийupdate
метод.3. @GhassanMaslamani обновлено, чтобы заявить, что это продолжение 5.