40 lines
1.2 KiB
Ruby
40 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# We store events about issuable label changes and weight changes in separate tables (not as
|
|
# other system notes), but we still want to display notes about label and weight changes
|
|
# as classic system notes in UI. This service merges synthetic label and weight notes
|
|
# with classic notes and sorts them by creation time.
|
|
|
|
module ResourceEvents
|
|
class MergeIntoNotesService
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
SYNTHETIC_NOTE_BUILDER_SERVICES = [
|
|
SyntheticLabelNotesBuilderService,
|
|
SyntheticMilestoneNotesBuilderService,
|
|
SyntheticStateNotesBuilderService
|
|
].freeze
|
|
|
|
attr_reader :resource, :current_user, :params
|
|
|
|
def initialize(resource, current_user, params = {})
|
|
@resource = resource
|
|
@current_user = current_user
|
|
@params = params
|
|
end
|
|
|
|
def execute(notes = [])
|
|
(notes + synthetic_notes).sort_by(&:created_at)
|
|
end
|
|
|
|
private
|
|
|
|
def synthetic_notes
|
|
SYNTHETIC_NOTE_BUILDER_SERVICES.flat_map do |service|
|
|
service.new(resource, current_user, params).execute
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
ResourceEvents::MergeIntoNotesService.prepend_mod_with('ResourceEvents::MergeIntoNotesService')
|