Skip to content
Snippets Groups Projects
Commit eeb41c75 authored by Douwe Maan's avatar Douwe Maan
Browse files

Add endpoints to resolve diff notes and discussions

parent ed6c8238
No related branches found
No related tags found
No related merge requests found
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
Loading
Loading
@@ -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(
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
 
Loading
Loading
@@ -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,
Loading
Loading
Loading
Loading
@@ -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),
Loading
Loading
Loading
Loading
@@ -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 }
Loading
Loading
@@ -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
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment