Сиквелировать 5 Найти создание с восстановлением внутри цикла

#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.