summaryrefslogtreecommitdiff
path: root/app/models/analytics/cycle_analytics/value_stream.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/analytics/cycle_analytics/value_stream.rb')
-rw-r--r--app/models/analytics/cycle_analytics/value_stream.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/app/models/analytics/cycle_analytics/value_stream.rb b/app/models/analytics/cycle_analytics/value_stream.rb
new file mode 100644
index 00000000000..3d8a0a53f5e
--- /dev/null
+++ b/app/models/analytics/cycle_analytics/value_stream.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+module Analytics
+ module CycleAnalytics
+ class ValueStream < ApplicationRecord
+ self.table_name = :analytics_cycle_analytics_group_value_streams
+
+ include Analytics::CycleAnalytics::Parentable
+
+ has_many :stages, -> { ordered },
+ class_name: 'Analytics::CycleAnalytics::Stage',
+ foreign_key: :group_value_stream_id,
+ index_errors: true,
+ inverse_of: :value_stream
+
+ validates :name, presence: true
+ validates :name, length: { minimum: 3, maximum: 100, allow_nil: false }, uniqueness: { scope: :group_id }
+
+ accepts_nested_attributes_for :stages, allow_destroy: true
+
+ scope :preload_associated_models, -> {
+ includes(:namespace,
+ stages: [
+ :namespace,
+ :end_event_label,
+ :start_event_label
+ ])
+ }
+
+ after_save :ensure_aggregation_record_presence
+
+ def custom?
+ persisted? || name != Analytics::CycleAnalytics::Stages::BaseService::DEFAULT_VALUE_STREAM_NAME
+ end
+
+ def self.build_default_value_stream(namespace)
+ new(name: Analytics::CycleAnalytics::Stages::BaseService::DEFAULT_VALUE_STREAM_NAME, namespace: namespace)
+ end
+
+ private
+
+ def ensure_aggregation_record_presence
+ Analytics::CycleAnalytics::Aggregation.safe_create_for_namespace(namespace)
+ end
+ end
+ end
+end