diff options
Diffstat (limited to 'app/services/resource_events/synthetic_milestone_notes_builder_service.rb')
-rw-r--r-- | app/services/resource_events/synthetic_milestone_notes_builder_service.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/app/services/resource_events/synthetic_milestone_notes_builder_service.rb b/app/services/resource_events/synthetic_milestone_notes_builder_service.rb new file mode 100644 index 00000000000..ad58417834e --- /dev/null +++ b/app/services/resource_events/synthetic_milestone_notes_builder_service.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# We store events about resource milestone changes in a separate table, +# but we still want to display notes about milestone changes +# as classic system notes in UI. This service generates "synthetic" notes for +# milestone event changes. + +module ResourceEvents + class SyntheticMilestoneNotesBuilderService < BaseSyntheticNotesBuilderService + private + + def synthetic_notes + return [] unless tracking_enabled? + + milestone_change_events.map do |event| + MilestoneNote.from_event(event, resource: resource, resource_parent: resource_parent) + end + end + + def milestone_change_events + return [] unless resource.respond_to?(:resource_milestone_events) + + events = resource.resource_milestone_events.includes(user: :status) # rubocop: disable CodeReuse/ActiveRecord + since_fetch_at(events) + end + + def tracking_enabled? + ::Feature.enabled?(:track_resource_milestone_change_events, resource.project) + end + end +end |