Commit 243bd020 authored by Jan Provaznik's avatar Jan Provaznik Committed by Thong Kuah

Create an event on epic actions

Creates new event when an epic is created, closed, reopened or
commented.
parent 7bf4ef50
......@@ -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
# 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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment