diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
commit | 9f46488805e86b1bc341ea1620b866016c2ce5ed (patch) | |
tree | f9748c7e287041e37d6da49e0a29c9511dc34768 /app/services/wiki_pages | |
parent | dfc92d081ea0332d69c8aca2f0e745cb48ae5e6d (diff) | |
download | gitlab-ce-9f46488805e86b1bc341ea1620b866016c2ce5ed.tar.gz |
Add latest changes from gitlab-org/gitlab@13-0-stable-ee
Diffstat (limited to 'app/services/wiki_pages')
-rw-r--r-- | app/services/wiki_pages/base_service.rb | 13 | ||||
-rw-r--r-- | app/services/wiki_pages/create_service.rb | 4 | ||||
-rw-r--r-- | app/services/wiki_pages/event_create_service.rb | 30 |
3 files changed, 37 insertions, 10 deletions
diff --git a/app/services/wiki_pages/base_service.rb b/app/services/wiki_pages/base_service.rb index 2e774973ca5..a0256ea5e69 100644 --- a/app/services/wiki_pages/base_service.rb +++ b/app/services/wiki_pages/base_service.rb @@ -6,13 +6,13 @@ module WikiPages # - external_action: the action we report to external clients with webhooks # - usage_counter_action: the action that we count in out internal counters # - event_action: what we record as the value of `Event#action` - class BaseService < ::BaseService + class BaseService < ::BaseContainerService private def execute_hooks(page) page_data = payload(page) - @project.execute_hooks(page_data, :wiki_page_hooks) - @project.execute_services(page_data, :wiki_page_hooks) + container.execute_hooks(page_data, :wiki_page_hooks) + container.execute_services(page_data, :wiki_page_hooks) increment_usage create_wiki_event(page) end @@ -46,12 +46,9 @@ module WikiPages def create_wiki_event(page) return unless ::Feature.enabled?(:wiki_events) - slug = slug_for_page(page) + response = WikiPages::EventCreateService.new(current_user).execute(slug_for_page(page), page, event_action) - Event.transaction do - wiki_page_meta = WikiPage::Meta.find_or_create(slug, page) - EventCreateService.new.wiki_event(wiki_page_meta, current_user, event_action) - end + log_error(response.message) if response.error? end def slug_for_page(page) diff --git a/app/services/wiki_pages/create_service.rb b/app/services/wiki_pages/create_service.rb index 811f460e042..4ef19676d82 100644 --- a/app/services/wiki_pages/create_service.rb +++ b/app/services/wiki_pages/create_service.rb @@ -3,8 +3,8 @@ module WikiPages class CreateService < WikiPages::BaseService def execute - project_wiki = ProjectWiki.new(@project, current_user) - page = WikiPage.new(project_wiki) + wiki = Wiki.for_container(container, current_user) + page = WikiPage.new(wiki) if page.create(@params) execute_hooks(page) diff --git a/app/services/wiki_pages/event_create_service.rb b/app/services/wiki_pages/event_create_service.rb new file mode 100644 index 00000000000..18a45d057a9 --- /dev/null +++ b/app/services/wiki_pages/event_create_service.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module WikiPages + class EventCreateService + # @param [User] author The event author + def initialize(author) + raise ArgumentError, 'author must not be nil' unless author + + @author = author + end + + def execute(slug, page, action) + return ServiceResponse.success(message: 'No event created as `wiki_events` feature is disabled') unless ::Feature.enabled?(:wiki_events) + + event = Event.transaction do + wiki_page_meta = WikiPage::Meta.find_or_create(slug, page) + + ::EventCreateService.new.wiki_event(wiki_page_meta, author, action) + end + + ServiceResponse.success(payload: { event: event }) + rescue ::EventCreateService::IllegalActionError, ::ActiveRecord::ActiveRecordError => e + ServiceResponse.error(message: e.message, payload: { error: e }) + end + + private + + attr_reader :author + end +end |