summaryrefslogtreecommitdiff
path: root/app/models/error_tracking/error_tracking_setting.rb
blob: c8ff3173227f1b3acd972c56ae24f6024e67bb1d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# frozen_string_literal: true

module ErrorTracking
  class ErrorTrackingSetting < ActiveRecord::Base
    belongs_to :project

    validates :uri, length: { maximum: 255 }, public_url: true
    validates :token, presence: true

    attr_encrypted :token,
      mode: :per_attribute_iv,
      key: Settings.attr_encrypted_db_key_base_truncated,
      algorithm: 'aes-256-gcm'

    def self.create_or_update(project, params)
      self.transaction(requires_new: true) do
        setting = self.for_project(project)
        setting.update!(params)
      end
    rescue ActiveRecord::RecordNotUnique
      retry
    end

    def self.for_project(project)
      self.where(project: project).first_or_initialize
    end
  end
end