Add endpoints to resolve diff notes and discussions

This commit is contained in:
Douwe Maan 2016-07-25 22:43:47 -06:00
parent ed6c8238f3
commit eeb41c759e
5 changed files with 71 additions and 12 deletions

View File

@ -0,0 +1,40 @@
class Projects::DiscussionsController < Projects::ApplicationController
before_action :module_enabled
before_action :merge_request
before_action :discussion
before_action :authorize_resolve_discussion!
def resolve
return render_404 unless discussion.resolvable?
discussion.resolve!(current_user)
head :ok
end
def unresolve
return render_404 unless discussion.resolvable?
discussion.unresolve!
head :ok
end
private
def merge_request
@merge_request ||= @project.merge_requests.find_by!(iid: params[:merge_request_id])
end
def discussion
@discussion ||= @merge_request.discussions.find { |d| d.id == params[:id] } || render_404
end
def authorize_resolve_discussion!
access_denied! unless discussion.can_resolve?(current_user)
end
def module_enabled
render_404 unless @project.merge_requests_enabled
end
end

View File

@ -369,12 +369,9 @@ class Projects::MergeRequestsController < Projects::ApplicationController
# :show, :diff, :commits, :builds. but not when request the data through AJAX # :show, :diff, :commits, :builds. but not when request the data through AJAX
def define_discussion_vars def define_discussion_vars
# Build a note object for comment form # Build a note object for comment form
@note = @project.notes.new(noteable: @noteable) @note = @project.notes.new(noteable: @merge_request)
@discussions = @noteable.mr_and_commit_notes. @discussions = @merge_request.discussions
inc_author_project_award_emoji.
fresh.
discussions
# This is not executed lazily # This is not executed lazily
@notes = Banzai::NoteRenderer.render( @notes = Banzai::NoteRenderer.render(

View File

@ -5,6 +5,7 @@ class Projects::NotesController < Projects::ApplicationController
before_action :authorize_read_note! before_action :authorize_read_note!
before_action :authorize_create_note!, only: [:create] before_action :authorize_create_note!, only: [:create]
before_action :authorize_admin_note!, only: [:update, :destroy] before_action :authorize_admin_note!, only: [:update, :destroy]
before_action :authorize_resolve_note!, only: [:resolve]
before_action :find_current_user_notes, only: [:index] before_action :find_current_user_notes, only: [:index]
def index def index
@ -67,12 +68,18 @@ class Projects::NotesController < Projects::ApplicationController
end end
def resolve def resolve
sleep 2 return render_404 unless note.resolvable?
note.resolve!(current_user)
head :ok head :ok
end end
def resolve_all def unresolve
sleep 2 return render_404 unless note.resolvable?
note.unresolve!
head :ok head :ok
end end
@ -185,6 +192,10 @@ class Projects::NotesController < Projects::ApplicationController
return access_denied! unless can?(current_user, :admin_note, note) return access_denied! unless can?(current_user, :admin_note, note)
end end
def authorize_resolve_note!
return access_denied! unless can?(current_user, :resolve_note, note)
end
def note_params def note_params
params.require(:note).permit( params.require(:note).permit(
:note, :noteable, :noteable_id, :noteable_type, :project_id, :note, :noteable, :noteable_id, :noteable_type, :project_id,

View File

@ -394,6 +394,13 @@ class MergeRequest < ActiveRecord::Base
) )
end end
def discussions
self.mr_and_commit_notes.
inc_author_project_award_emoji.
fresh.
discussions
end
def hook_attrs def hook_attrs
attrs = { attrs = {
source: source_project.try(:hook_attrs), source: source_project.try(:hook_attrs),

View File

@ -720,6 +720,13 @@ Rails.application.routes.draw do
get :update_branches get :update_branches
get :diff_for_path get :diff_for_path
end end
resources :discussions, only: [], constraints: { id: /\h{40}/ } do
member do
post :resolve
delete :resolve, action: :unresolve
end
end
end end
resources :branches, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex } resources :branches, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }
@ -825,14 +832,11 @@ Rails.application.routes.draw do
resources :group_links, only: [:index, :create, :destroy], constraints: { id: /\d+/ } resources :group_links, only: [:index, :create, :destroy], constraints: { id: /\d+/ }
resources :notes, only: [:index, :create, :destroy, :update], constraints: { id: /\d+/ } do resources :notes, only: [:index, :create, :destroy, :update], constraints: { id: /\d+/ } do
collection do
post :resolve_all
end
member do member do
post :toggle_award_emoji post :toggle_award_emoji
delete :delete_attachment delete :delete_attachment
post :resolve post :resolve
delete :resolve, action: :unresolve
end end
end end