Это мой первый кастомный скрипт на Ruby.
За почти 50 лет программирования на более чем 20 языках и диалектах мне никогда не приходилось (и не хотелось
) писать на Ruby, но ладно, вы меня поймали… пожалуйста, будьте мягче. ![]()
Моя цель — идентифицировать учетные записи пользователей, которые не были подтверждены по ссылкам в письмах, и приостановить их, чтобы я мог проверить их перед удалением. При первоначальной настройке у меня были настройки на разных стадиях разработки. Письма с 2FA не отправлялись для некоторых регистраций, и было много поддельных регистраций, которые я теперь хотел бы отфильтровать.
Версия 0.0.1
rails c
# Сначала убедитесь, что уровни доверия пользователей (TL) соответствуют последним определениям
User.all.find_each do |user|
Promotion.recalculate(user)
end
Group.ensure_consistency!
# Подготовка к циклу
logger = StaffActionLogger.new(User.where("id = 'admin'"))
# временная дата, пользователи будут удалены до этой даты
suspend_till = DateTime.new(2028, 12, 31)
suspend_at = DateTime.now
reason = 'Неактивен'
# Идентификация потенциально неактивных учетных записей
User.where("views = 0 OR approved = FALSE OR last_seen_at IS NULL")
.where("id > 0")
.find_each do |user|
user.suspended_till = suspend_till
user.suspended_at = suspend_at
user.change_trust_level!(TrustLevel[0])
# сохраните пользователя, запишите действие и ... выполните всё, что требуется для этого триггера
user.save!
logger.log_user_suspend(user, reason)
DiscourseEvent.trigger(:user_suspended, user: user)
# избегайте перегрузки почтового сервера
sleep(10)
end
Запуская событие, я хочу, чтобы пользователям отправлялись письма — будет много отскоков, и возможно, несколько человек вернутся для подтверждения. Через неделю я выберу все ещё приостановленные учетные записи и удалю их.
Вопросы:
- В целом, сделает ли это то, что задумано?
- Есть ли лучший подход?
- Является ли логирование избыточным по сравнению с триггером события?
- Можно ли сделать это с помощью JavaScript?
- Стоит ли мне опубликовать это в другой категории?
- Есть ли какие-либо другие советы?
Спасибо!!