Bewährte Methode zur Automatisierung von Titeln nach Gruppe + Vertrauensstufe-Kombinationen

Nein, der vorherige Code, den ich mit einer KI ausprobiert habe, funktionierte auch nicht. Nachdem alles eingerichtet war, passierte überhaupt nichts.

Ich wollte Ihnen den vollständigen Code meines letzten Versuchs zeigen. Ich hoffte, Sie könnten sehen, was ich falsch mache.

1. plugin.rb

# name: add-title-by-group-trust-level
# about: weise Titel über die primäre Gruppe + Vertrauensstufe mittels SQL zu
# version: 0.2
# authors: your-name

# Hinweis: Ich bin mir nicht sicher, ob ich hier eine 'require'-Zeile benötige, um die Job-Datei zu laden.
# Ich vermute, das könnte das fehlende Stück sein.
enabled_site_setting :add_title_by_group_trust_enabled

2. app/jobs/scheduled/update-all-titles.rb

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

    def execute(args)
      return unless SiteSetting.add_title_by_group_trust_enabled

      mappings = JSON.parse(SiteSetting.group_trust_level_titles || '{}')

      User.transaction do
        mappings.each do |group_key, titles|
          next unless titles.is_a?(Array)

          (1...titles.size).each do |tl|
            title = titles[tl]
            next if title.blank?

            group = Group.find_by("LOWER(name) = ?", group_key.downcase)
            next unless group

            User.where(primary_group_id: group.id, trust_level: tl, admin: false, moderator: false)
                .where.not(title: title)
                .update_all(title: title)
          end
        end
      end
    end
  end
end

3. config/settings.yml

plugins:
  add_title_by_group_trust_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

So habe ich es in den Site-Einstellungen konfiguriert:

Ich habe diesen JSON in die Einstellung group_trust_level_titles eingefügt:

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

Das Problem:
Der Job UpdateTitles erscheint nicht im Sidekiq-Scheduler (/sidekiq/scheduler).

Ich habe ihn jedoch in der Rails-Konsole gemäß der Methode, die mir die KI gegeben hat, getestet, und die Kernlogik ist einwandfrei und gibt korrekt alle Benutzer aus, die die Bedingungen erfüllen.

Dies ist das Testskript, das ich in der Rails-Konsole verwendet habe:

mappings = JSON.parse(SiteSetting.group_trust_level_titles || '{}')

mappings.each do |group_key, titles|
  next unless titles.is_a?(Array)

  (1...titles.size).each do |tl|
    title = titles[tl]
    next if title.blank?

    group = Group.find_by("LOWER(name) = ?", group_key.downcase)
    unless group
      puts "Konnte Gruppe nicht finden: #{group_key}"
      next
    end

    users = User.where(primary_group_id: group.id, trust_level: tl, admin: false, moderator: false)
                .where.not(title: title)
    next if users.empty?

    puts "====== Gruppe: #{group.name} Vertrauensstufe: #{tl} Neuer Titel: '#{title}' ======"
    users.each do |user|
      puts "Benutzer ID:#{user.id}, Benutzername:#{user.username}, aktueller Titel:'#{user.title}'"
    end
  end
end

Es scheint also, dass die Logik selbst korrekt ist, aber Discourse den geplanten Job nicht registriert. Wie auch immer, je mehr ich versuche, es zu ändern, desto verwirrender wird es… Ich bin mir nicht sicher, ob dies der richtige Ansatz ist, und da ich nicht programmieren kann, fühlt es sich sehr schwierig an, dies zu implementieren. Haben Sie eine bessere Methode?