diff options
Diffstat (limited to 'app/models/issue.rb')
-rw-r--r-- | app/models/issue.rb | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb index 2f2d24cbe93..af78466e6a9 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -24,6 +24,8 @@ class Issue < ApplicationRecord include Todoable include FromUnion + extend ::Gitlab::Utils::Override + DueDateStruct = Struct.new(:title, :name).freeze NoDueDate = DueDateStruct.new('No Due Date', '0').freeze AnyDueDate = DueDateStruct.new('Any Due Date', '').freeze @@ -88,7 +90,6 @@ class Issue < ApplicationRecord test_case: 2 ## EE-only } - alias_attribute :parent_ids, :project_id alias_method :issuing_parent, :project alias_attribute :external_author, :service_desk_reply_to @@ -113,8 +114,8 @@ class Issue < ApplicationRecord scope :order_severity_desc, -> { includes(:issuable_severity).order('issuable_severities.severity DESC NULLS LAST') } scope :preload_associated_models, -> { preload(:assignees, :labels, project: :namespace) } - scope :with_web_entity_associations, -> { preload(:author, :project) } - scope :with_api_entity_associations, -> { preload(:timelogs, :assignees, :author, :notes, :labels, project: [:route, { namespace: :route }] ) } + scope :with_web_entity_associations, -> { preload(:author, project: [:project_feature, :route, namespace: :route]) } + scope :preload_awardable, -> { preload(:award_emoji) } scope :with_label_attributes, ->(label_attributes) { joins(:labels).where(labels: label_attributes) } scope :with_alert_management_alerts, -> { joins(:alert_management_alert) } scope :with_prometheus_alert_events, -> { joins(:issues_prometheus_alert_events) } @@ -191,7 +192,8 @@ class Issue < ApplicationRecord end def self.relative_positioning_query_base(issue) - in_projects(issue.parent_ids) + projects = issue.project.group&.root_ancestor&.all_projects || issue.project + in_projects(projects) end def self.relative_positioning_parent_column @@ -342,6 +344,8 @@ class Issue < ApplicationRecord .preload(preload) .reorder('issue_link_id') + related_issues = yield related_issues if block_given? + cross_project_filter = -> (issues) { issues.where(project: project) } Ability.issues_readable_by_user(related_issues, current_user, @@ -446,10 +450,20 @@ class Issue < ApplicationRecord issue_email_participants.pluck(IssueEmailParticipant.arel_table[:email].lower) end + def issue_assignee_user_ids + issue_assignees.pluck(:user_id) + end + private + # Ensure that the metrics association is safely created and respecting the unique constraint on issue_id + override :ensure_metrics def ensure_metrics - super + if !association(:metrics).loaded? || metrics.blank? + metrics_record = Issue::Metrics.safe_find_or_create_by(issue: self) + self.metrics = metrics_record + end + metrics.record! end |