그룹 + 신뢰도 조합으로 제목 자동화하는 모범 사례

업데이트 내용을 공유하고 도움을 주신 모든 분께 감사의 말씀을 전하고자 합니다.

최근 변경 사항 덕분에 플러그인이 제가 의도한 대로 정확히 작동하고 있습니다! 이제 사용자의 기본 그룹과 신뢰 수준에 따라 다른 타이틀을 올바르게 지정합니다.

아래에 최종적으로 정상 작동하는 코드를 게시합니다. 코드는 정확해 보이지만, 개발자가 아닌 관계로 제가 놓쳤을 수 있는 개선 또는 최적화가 필요한 부분이 있는지 궁금합니다.

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
        # JSON 문자열을 Ruby 배열로 수동 파싱합니다.
        rules = JSON.parse(rules_json_string)
      rescue JSON::ParserError
        # JSON이 잘못된 형식인 경우, 에러를 기록하고 작업을 실패하지 않도록 종료합니다.
        Rails.logger.error("Group-Based Titles Plugin: Failed to parse group_based_title_rules JSON.")
        return
      end
      
      # 파싱된 규칙이 비어 있지 않은 배열인지 확인하는 안전 검사.
      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: "User Group"
          component: "group-chooser"
        trust_level:
          type: integer
          name: "Trust Level"
          min: 1
          max: 4
        title:
          type: string
          name: "Title"
  
  update_title_frequency:
    default: 24
    type: integer

plugin.rb

# frozen_string_literal: true

# name: add-title-by-group-trust-level
# about: Assign titles based on primary group and trust level.
# 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