Add endpoints to resolve diff notes and discussions
This commit is contained in:
		
							parent
							
								
									ed6c8238f3
								
							
						
					
					
						commit
						eeb41c759e
					
				|  | @ -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 | ||||
|  | @ -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( | ||||
|  |  | |||
|  | @ -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, | ||||
|  |  | |||
|  | @ -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), | ||||
|  |  | |||
|  | @ -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 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue