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
def define_discussion_vars
# 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.
inc_author_project_award_emoji.
fresh.
discussions
@discussions = @merge_request.discussions
# This is not executed lazily
@notes = Banzai::NoteRenderer.render(

View file

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

View file

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

View file

@ -720,6 +720,13 @@ Rails.application.routes.draw do
get :update_branches
get :diff_for_path
end
resources :discussions, only: [], constraints: { id: /\h{40}/ } do
member do
post :resolve
delete :resolve, action: :unresolve
end
end
end
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 :notes, only: [:index, :create, :destroy, :update], constraints: { id: /\d+/ } do
collection do
post :resolve_all
end
member do
post :toggle_award_emoji
delete :delete_attachment
post :resolve
delete :resolve, action: :unresolve
end
end