diff options
Diffstat (limited to 'app/models/abuse/trust_score.rb')
-rw-r--r-- | app/models/abuse/trust_score.rb | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/app/models/abuse/trust_score.rb b/app/models/abuse/trust_score.rb new file mode 100644 index 00000000000..9ad7c9b14b1 --- /dev/null +++ b/app/models/abuse/trust_score.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module Abuse + class TrustScore < ApplicationRecord + MAX_EVENTS = 100 + + self.table_name = 'abuse_trust_scores' + + enum source: Enums::Abuse::Source.sources + + belongs_to :user + + validates :user, presence: true + validates :score, presence: true + validates :source, presence: true + + before_create :assign_correlation_id + after_commit :remove_old_scores + + private + + def assign_correlation_id + self.correlation_id_value ||= (Labkit::Correlation::CorrelationId.current_id || '') + end + + def remove_old_scores + count = user.trust_scores_for_source(source).count + return unless count > MAX_EVENTS + + TrustScore.delete( + user.trust_scores_for_source(source) + .order(created_at: :asc) + .limit(count - MAX_EVENTS) + ) + end + end +end |