Este es mi primer script personalizado de Ruby.
En casi 50 años de codificación con más de 20 lenguajes y dialectos, nunca he necesitado (o querido
) escribir en Ruby, pero de acuerdo, me has convencido… por favor, sé amable. ![]()
Mi objetivo es identificar las cuentas de usuario que no han sido autenticadas por enlaces de correo electrónico y suspender las cuentas para poder revisarlas antes de eliminarlas. Durante la configuración inicial, tuve configuraciones en varias etapas de desarrollo. Los correos electrónicos de 2FA no se enviaron para algunos registros, y hubo muchos registros falsos que ahora me gustaría filtrar.
Versión 0.0.1
rails c
# Primero, asegúrate de que los TL de usuario se ajusten a las últimas definiciones
User.all.find_each do |user|
Promotion.recalculate(user)
end
Group.ensure_consistency!
# Preparar para el bucle
logger = StaffActionLogger.new(User.where("id = 'admin'"))
# fecha temporal, los usuarios serán eliminados antes de esta fecha
suspend_till = DateTime.new(2028, 12, 31)
suspend_at = DateTime.now
reason = 'Inactivo'
# Identificar cuentas potencialmente muertas
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])
# guardar el usuario, registrar la acción y... hacer lo que se haga para este disparador
user.save!
logger.log_user_suspend(user, reason)
DiscourseEvent.trigger(:user_suspended, user: user)
# evitar abusar del servidor de correo
sleep(10)
end
Al activar el evento, me gustaría que se enviaran correos electrónicos a los usuarios; habrá muchos rebotes y quizás algunas personas regresen para autenticarse. Después de una semana, seleccionaré todas las cuentas que aún estén suspendidas y las eliminaré.
Preguntas:
- En general, ¿hará esto lo que se pretende?
- ¿Hay un mejor enfoque?
- ¿Es el registro redundante con el disparador del evento?
- ¿Podemos hacer esto con JavaScript?
- ¿Debería publicar esto en otra categoría?
- ¿Algún otro consejo?
¡¡Gracias!!