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 |   # :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( | ||||||
|  |  | ||||||
|  | @ -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, | ||||||
|  |  | ||||||
|  | @ -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), | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue