# frozen_string_literal: true class ModelAccuracy < ActiveRecord::Base def self.adjust_model_accuracy(new_status, reviewable) return if %i[approved rejected].exclude?(new_status) return if [ReviewableAiPost, ReviewableAiChatMessage].exclude?(reviewable.class) verdicts = reviewable.payload.to_h["verdicts"] || {} verdicts.each do |model_name, verdict| accuracy_model = find_by(model: model_name) attribute = if verdict new_status == :approved ? :flags_agreed : :flags_disagreed else new_status == :rejected ? :flags_agreed : :flags_disagreed end accuracy_model.increment!(attribute) end end def calculate_accuracy return 0 if total_flags.zero? (flags_agreed * 100) / total_flags end private def total_flags flags_agreed + flags_disagreed end end # == Schema Information # # Table name: model_accuracies # # id :bigint not null, primary key # model :string not null # classification_type :string not null # flags_agreed :integer default(0), not null # flags_disagreed :integer default(0), not null # created_at :datetime not null # updated_at :datetime not null # # Indexes # # index_model_accuracies_on_model (model) UNIQUE #