Mejor práctica para automatizar títulos por combinaciones de grupo y nivel de confianza

¡Hola!

He modificado el plugin para que se ajuste a mis necesidades y me gustaría compartir lo que hice, mi flujo de trabajo actual y algunas preguntas/solicitudes de asesoramiento.


1. Mis Modificaciones

Ruta y contenido del archivo:

Archivo: app/jobs/scheduled/update-all-titles.rb

# frozen_string_literal: true

module AddTitleBasedOnTrustLevel
  class UpdateTitles < ::Jobs::Scheduled
    every SiteSetting.update_title_frequency.hours

    def execute(args)
      group_titles = JSON.parse(SiteSetting.group_trust_level_titles || "{}")

      User.find_each do |user|
        # Omitir administradores y moderadores, no actualizar sus títulos
        next if user.admin? || user.moderator?

        group_id = user.primary_group_id
        next unless group_id

        group = Group.find_by(id: group_id)
        next unless group

        group_key = group.name.downcase
        tl = user.trust_level

        titles = group_titles[group_key]
        next unless titles.is_a?(Array)
        next unless tl >= 1 && tl <= 4

        new_title = titles[tl]
        next unless new_title.present?

        user.update_column(:title, new_title) if user.title != new_title
      end
    end
  end
end

Archivo: config/settings.yml

plugins:
  add_title_based_on_trust_level_enabled:
    default: false
    client: true
  group_trust_level_titles:
    default: '{"designers": ["", "Junior Designer", "Designer", "Senior Designer", "Chief Designer"], "developers": ["", "Junior Developer", "Developer", "Senior Developer", "Tech Lead"]}'
    type: string
    client: true
    multiline: true
  update_title_frequency:
    default: 24
    type: integer

2. Cómo Probé

Actualmente estoy ejecutando esta lógica manualmente a través de la consola de Rails para verificar si la función funciona. Actualiza los títulos de los usuarios en masa según mis requisitos.


3. Problema de Entrada de Configuración del Plugin

No hay un botón de “Configuración” para este plugin en la página /admin/plugins. En este momento, para cambiar la configuración, tengo que visitar /admin/plugins/add-title-based-on-trust-level/settings directamente. ¿Hay alguna manera de que el botón o enlace de configuración aparezca en la página de Plugins para un acceso más fácil?


4. Mi Configuración Actual

Esta es mi configuración JSON actual (adjuntaré una captura de pantalla también):

{
  "designers": ["", "Junior Designer", "Designer", "Senior Designer", "Chief Designer"],
  "developers": ["", "Junior Developer", "Developer", "Senior Developer", "Tech Lead"]
}


5. Preguntas / Posibles Mejoras

  • ¿Este enfoque (iterar sobre cada usuario y actualizar su título) corre el riesgo de problemas de rendimiento si hay muchos usuarios? ¿Existe una mejor práctica para esto?
  • ¿Algún consejo sobre optimización, ya sea para el trabajo programado o para la interfaz de usuario de configuración de administración?
  • ¿Hay algo inseguro o problemático en mi método con lo que deba tener cuidado?

¡Muchas gracias por tu gran trabajo y por este útil plugin!
Si tienes alguna sugerencia, o si planeas mejorar la configuración de títulos de grupo + nivel de confianza en el futuro, me encantaría escuchar tus ideas.

2 Me gusta