Create an event on epic actions

Creates new event when an epic is created, closed, reopened or
commented.
This commit is contained in:
Jan Provaznik 2019-09-03 21:29:55 +00:00 committed by Thong Kuah
parent 7bf4ef5026
commit 243bd0202f
11 changed files with 33 additions and 3 deletions

View file

@ -19,6 +19,7 @@ class Board < ApplicationRecord
def parent
@parent ||= group || project
end
alias_method :resource_parent, :parent
def group_board?
group_id.present?

View file

@ -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

View file

@ -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

View file

@ -260,6 +260,7 @@ class Milestone < ApplicationRecord
def parent
group || project
end
alias_method :resource_parent, :parent
def group_milestone?
group_id.present?

View file

@ -477,6 +477,7 @@ class Note < ApplicationRecord
def parent
project
end
alias_method :resource_parent, :parent
private

View file

@ -146,6 +146,7 @@ class Todo < ApplicationRecord
def parent
project
end
alias_method :resource_parent, :parent
def unmergeable?
action == UNMERGEABLE

View file

@ -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

View 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

View file

@ -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

View file

@ -26,6 +26,7 @@ issues:
events:
- author
- project
- group
- target
- push_event_payload
notes:

View file

@ -33,6 +33,7 @@ Event:
- target_type
- target_id
- project_id
- group_id
- created_at
- updated_at
- action