Create an event on epic actions
Creates new event when an epic is created, closed, reopened or commented.
This commit is contained in:
parent
7bf4ef5026
commit
243bd0202f
11 changed files with 33 additions and 3 deletions
|
@ -19,6 +19,7 @@ class Board < ApplicationRecord
|
|||
def parent
|
||||
@parent ||= group || project
|
||||
end
|
||||
alias_method :resource_parent, :parent
|
||||
|
||||
def group_board?
|
||||
group_id.present?
|
||||
|
|
|
@ -277,6 +277,10 @@ module Issuable
|
|||
end
|
||||
end
|
||||
|
||||
def resource_parent
|
||||
project
|
||||
end
|
||||
|
||||
def milestone_available?
|
||||
project_id == milestone&.project_id || project.ancestors_upto.compact.include?(milestone&.group)
|
||||
end
|
||||
|
|
|
@ -51,6 +51,7 @@ class Event < ApplicationRecord
|
|||
|
||||
belongs_to :author, class_name: "User"
|
||||
belongs_to :project
|
||||
belongs_to :group
|
||||
|
||||
belongs_to :target, -> {
|
||||
# If the association for "target" defines an "author" association we want to
|
||||
|
|
|
@ -260,6 +260,7 @@ class Milestone < ApplicationRecord
|
|||
def parent
|
||||
group || project
|
||||
end
|
||||
alias_method :resource_parent, :parent
|
||||
|
||||
def group_milestone?
|
||||
group_id.present?
|
||||
|
|
|
@ -477,6 +477,7 @@ class Note < ApplicationRecord
|
|||
def parent
|
||||
project
|
||||
end
|
||||
alias_method :resource_parent, :parent
|
||||
|
||||
private
|
||||
|
||||
|
|
|
@ -146,6 +146,7 @@ class Todo < ApplicationRecord
|
|||
def parent
|
||||
project
|
||||
end
|
||||
alias_method :resource_parent, :parent
|
||||
|
||||
def unmergeable?
|
||||
action == UNMERGEABLE
|
||||
|
|
|
@ -95,16 +95,23 @@ class EventCreateService
|
|||
private
|
||||
|
||||
def create_record_event(record, current_user, status)
|
||||
create_event(record.project, current_user, status, target_id: record.id, target_type: record.class.name)
|
||||
create_event(record.resource_parent, current_user, status, target_id: record.id, target_type: record.class.name)
|
||||
end
|
||||
|
||||
def create_event(project, current_user, status, attributes = {})
|
||||
def create_event(resource_parent, current_user, status, attributes = {})
|
||||
attributes.reverse_merge!(
|
||||
project: project,
|
||||
action: status,
|
||||
author_id: current_user.id
|
||||
)
|
||||
|
||||
resource_parent_attr = case resource_parent
|
||||
when Project
|
||||
:project
|
||||
when Group
|
||||
:group
|
||||
end
|
||||
attributes[resource_parent_attr] = resource_parent if resource_parent_attr
|
||||
|
||||
Event.create!(attributes)
|
||||
end
|
||||
end
|
||||
|
|
9
db/migrate/20190826100605_add_group_column_to_events.rb
Normal file
9
db/migrate/20190826100605_add_group_column_to_events.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddGroupColumnToEvents < ActiveRecord::Migration[5.2]
|
||||
DOWNTIME = false
|
||||
|
||||
def change
|
||||
add_reference :events, :group, index: true, foreign_key: { to_table: :namespaces, on_delete: :cascade }
|
||||
end
|
||||
end
|
|
@ -1310,9 +1310,11 @@ ActiveRecord::Schema.define(version: 2019_09_02_160015) do
|
|||
t.datetime_with_timezone "updated_at", null: false
|
||||
t.integer "action", limit: 2, null: false
|
||||
t.string "target_type"
|
||||
t.bigint "group_id"
|
||||
t.index ["action"], name: "index_events_on_action"
|
||||
t.index ["author_id", "project_id"], name: "index_events_on_author_id_and_project_id"
|
||||
t.index ["created_at", "author_id"], name: "analytics_index_events_on_created_at_and_author_id"
|
||||
t.index ["group_id"], name: "index_events_on_group_id"
|
||||
t.index ["project_id", "created_at"], name: "index_events_on_project_id_and_created_at"
|
||||
t.index ["project_id", "id"], name: "index_events_on_project_id_and_id"
|
||||
t.index ["target_type", "target_id"], name: "index_events_on_target_type_and_target_id"
|
||||
|
@ -3838,6 +3840,7 @@ ActiveRecord::Schema.define(version: 2019_09_02_160015) do
|
|||
add_foreign_key "epics", "users", column: "assignee_id", name: "fk_dccd3f98fc", on_delete: :nullify
|
||||
add_foreign_key "epics", "users", column: "author_id", name: "fk_3654b61b03", on_delete: :cascade
|
||||
add_foreign_key "epics", "users", column: "closed_by_id", name: "fk_aa5798e761", on_delete: :nullify
|
||||
add_foreign_key "events", "namespaces", column: "group_id", on_delete: :cascade
|
||||
add_foreign_key "events", "projects", on_delete: :cascade
|
||||
add_foreign_key "events", "users", column: "author_id", name: "fk_edfd187b6f", on_delete: :cascade
|
||||
add_foreign_key "fork_network_members", "fork_networks", on_delete: :cascade
|
||||
|
|
|
@ -26,6 +26,7 @@ issues:
|
|||
events:
|
||||
- author
|
||||
- project
|
||||
- group
|
||||
- target
|
||||
- push_event_payload
|
||||
notes:
|
||||
|
|
|
@ -33,6 +33,7 @@ Event:
|
|||
- target_type
|
||||
- target_id
|
||||
- project_id
|
||||
- group_id
|
||||
- created_at
|
||||
- updated_at
|
||||
- action
|
||||
|
|
Loading…
Reference in a new issue