@IIITRIX

Как изменить значение в базе данных по истечении времени?

Как изменить значение в базе данных по истечении времени?

Я делаю бан пользователя, устанавливаю время бана и устанавливаю значение is_banned равным true, когда значение ban_expiry становится не больше текущего времени, нужно изменить is_banned true на false. Как это сделать?

exports.banUnbanUser = async (req, res, next) => {
  const { userId } = req.query;
  try {
    const user = await User.findById(userId);
    if (user.is_banned) {
      user.is_banned = false;
      user.ban_expiry = null;
    } else {
      user.is_banned = true;
      user.ban_expiry = new Date() + 7 * 24 * 60 * 60 * 1000;
    }

    await user.save();
    return res.status(200).json({
      success: true,
    });
  } catch (error) {
    next(error);
  }
};
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
Steel_Balls
@Steel_Balls
0L3QsNGH0LjQvdCw0Lsg0YEgQkFTSUMg0L3QsCDQo9Ca0J3Qpi
Вижу два варианта:
1. сделать скрипт, который постоянно проверяет и обновляет в базе статус юзера. Но тут лишняя нагрузка на базу
2. Делать проверку через хранимую процедуру. Сама процедура должна выглядеть примерно так:
PROC CheckBanned(userId)
BEGIN
  проверка ban_expired_date для этого userID: если expired, то is_banned = false и, при необходимости, записать в историю банов время от и до
  вернуть значение is_banned
END

В коде делать обращение к этой хранимке
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы