Melhor Prática para Automatizar Títulos por Combinações de Grupo + Nível de Confiança

Olá!

Modifiquei o plugin para atender às minhas necessidades e gostaria de compartilhar o que fiz, meu fluxo de trabalho atual e algumas perguntas/solicitações de conselhos.


1. Minhas Modificações

Caminho e conteúdo do arquivo:

Arquivo: 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|
        # Pula administradores e moderadores, não atualiza seus 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

Arquivo: 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. Como Testei

Atualmente estou executando essa lógica manualmente via console do Rails para verificar se a função funciona. Ela atualiza os títulos dos usuários em massa de acordo com meus requisitos.


3. Problema de Entrada de Configurações do Plugin

Não há um botão de “Configurações” para este plugin na página /admin/plugins. No momento, para alterar a configuração, preciso visitar /admin/plugins/add-title-based-on-trust-level/settings diretamente. Existe uma maneira de fazer o botão ou link de configurações aparecer na página de Plugins para facilitar o acesso?


4. Minhas Configurações Atuais

Esta é minha configuração JSON atual (anexarei uma captura de tela também):

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


5. Perguntas / Possíveis Melhorias

  • Essa abordagem (iterar por cada usuário e atualizar seu título) corre o risco de problemas de desempenho se houver muitos usuários? Existe uma melhor prática para isso?
  • Algum conselho sobre otimização, seja para o job agendado ou para a interface de configurações do administrador?
  • Há algo inseguro ou problemático no meu método com o qual eu deva ter cuidado?

Muito obrigado pelo seu ótimo trabalho e por este plugin útil!
Se você tiver alguma sugestão, ou se planeja melhorar a configuração de títulos de grupo + nível de confiança no futuro, adoraria ouvir suas opiniões.

2 curtidas