Beste praktijk voor het automatiseren van titels op basis van groeps- en vertrouwensniveaucombinaties

Graag een update en bedankt aan iedereen die heeft geholpen.

Met de laatste wijzigingen werkt de plugin nu precies zoals ik bedoeld had! Het kent correct verschillende titels toe op basis van de primaire groep en het vertrouwensniveau van de gebruiker.

Ik plaats hieronder de definitieve werkende code. Het lijkt correct, maar aangezien ik geen ontwikkelaar ben, vroeg ik me af of er gebieden zijn voor verbetering of optimalisatie die ik misschien heb gemist.

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

# frozen_string_literal: true

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

    def execute(args)
      return unless SiteSetting.add_title_by_group_trust_enabled

      rules_json_string = SiteSetting.group_based_title_rules
      return if rules_json_string.blank?

      begin
        # Parseer de JSON-tekenreeks handmatig naar een Ruby-array.
        rules = JSON.parse(rules_json_string)
      rescue JSON::ParserError
        # Als de JSON ongeldig is, log dan een fout en sluit af om te voorkomen dat de taak mislukt.
        Rails.logger.error("Group-Based Titles Plugin: Kon group_based_title_rules JSON niet parsen.")
        return
      end
      
      # Veiligheidscontrole om ervoor te zorgen dat de geparseerde regels een niet-lege array zijn.
      return unless rules.is_a?(Array) && rules.present?

      User.transaction do
        rules.each do |rule|
          group_id = rule["group_id"]
          trust_level = rule["trust_level"]
          title = rule["title"]

          next if group_id.blank? || trust_level.blank? || title.blank?

          User.where(primary_group_id: group_id, trust_level: trust_level)
              .where.not(title: title)
              .update_all(title: title)
        end
      end
    end
  end
end

config/settings.yml

plugins:
  add_title_by_group_trust_enabled:
    default: true
    client: true

  group_based_title_rules:
    type: objects
    default: []
    schema:
      properties:
        group_id:
          type: integer
          name: "Gebruikersgroep"
          component: "group-chooser"
        trust_level:
          type: integer
          name: "Vertrouwensniveau"
          min: 1
          max: 4
        title:
          type: string
          name: "Titel"
  
  update_title_frequency:
    default: 24
    type: integer

plugin.rb

# frozen_string_literal: true

# name: add-title-by-group-trust-level
# about: Kent titels toe op basis van primaire groep en vertrouwensniveau.
# version: 2.1.0
# authors: Your Name

enabled_site_setting :add_title_by_group_trust_enabled

after_initialize do
  require_relative "./app/jobs/scheduled/update-all-titles.rb"
end
1 like