49 lines
1.1 KiB
Ruby
49 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class DiffNotePosition < ApplicationRecord
|
|
belongs_to :note
|
|
attr_accessor :line_range
|
|
|
|
enum diff_content_type: {
|
|
text: 0,
|
|
image: 1
|
|
}
|
|
|
|
enum diff_type: {
|
|
head: 0
|
|
}
|
|
|
|
def position
|
|
Gitlab::Diff::Position.new(
|
|
old_path: old_path,
|
|
new_path: new_path,
|
|
old_line: old_line,
|
|
new_line: new_line,
|
|
position_type: diff_content_type,
|
|
diff_refs: Gitlab::Diff::DiffRefs.new(
|
|
base_sha: base_sha,
|
|
start_sha: start_sha,
|
|
head_sha: head_sha
|
|
)
|
|
)
|
|
end
|
|
|
|
def position=(position)
|
|
assign_attributes(self.class.position_to_attrs(position))
|
|
end
|
|
|
|
def self.create_or_update_for(note, params)
|
|
attrs = position_to_attrs(params[:position])
|
|
attrs.merge!(params.slice(:diff_type, :line_code))
|
|
attrs[:note_id] = note.id
|
|
|
|
upsert(attrs, unique_by: [:note_id, :diff_type])
|
|
end
|
|
|
|
def self.position_to_attrs(position)
|
|
position_attrs = position.to_h
|
|
position_attrs[:diff_content_type] = position_attrs.delete(:position_type)
|
|
position_attrs.delete(:line_range)
|
|
position_attrs
|
|
end
|
|
end
|