Commit 84695432 authored by Valery Sizov's avatar Valery Sizov

[Multiple issue assignees] Fix legacy API v4. Only first assignees is taking into account

parent 0e09fdc9
...@@ -295,6 +295,13 @@ module API ...@@ -295,6 +295,13 @@ module API
expose :project_id, :issues_events, :merge_requests_events expose :project_id, :issues_events, :merge_requests_events
expose :note_events, :build_events, :pipeline_events, :wiki_page_events expose :note_events, :build_events, :pipeline_events, :wiki_page_events
end end
class Issue < ::API::Entities::Issue
unexpose :assignees
expose :assignee do |issue, options|
::API::Entities::UserBasic.represent(issue.assignees.first, options)
end
end
end end
end end
end end
...@@ -14,6 +14,14 @@ module API ...@@ -14,6 +14,14 @@ module API
authorize! access_level, merge_request authorize! access_level, merge_request
merge_request merge_request
end end
def convert_parameters_from_legacy_format(params)
if params[:assignee_id].present?
params[:assignee_ids] = [params.delete(:assignee_id)]
end
params
end
end end
end end
end end
...@@ -8,6 +8,7 @@ module API ...@@ -8,6 +8,7 @@ module API
helpers do helpers do
def find_issues(args = {}) def find_issues(args = {})
args = params.merge(args) args = params.merge(args)
args = convert_parameters_from_legacy_format(args)
args.delete(:id) args.delete(:id)
args[:milestone_title] = args.delete(:milestone) args[:milestone_title] = args.delete(:milestone)
...@@ -53,7 +54,7 @@ module API ...@@ -53,7 +54,7 @@ module API
resource :issues do resource :issues do
desc "Get currently authenticated user's issues" do desc "Get currently authenticated user's issues" do
success ::API::Entities::Issue success ::API::V3::Entities::Issue
end end
params do params do
optional :state, type: String, values: %w[opened closed all], default: 'all', optional :state, type: String, values: %w[opened closed all], default: 'all',
...@@ -62,7 +63,7 @@ module API ...@@ -62,7 +63,7 @@ module API
end end
get do get do
issues = find_issues(scope: 'authored') issues = find_issues(scope: 'authored')
present paginate(issues), with: ::API::Entities::Issue, current_user: current_user present paginate(issues), with: ::API::V3::Entities::Issue, current_user: current_user
end end
end end
...@@ -71,7 +72,7 @@ module API ...@@ -71,7 +72,7 @@ module API
end end
resource :groups, requirements: { id: %r{[^/]+} } do resource :groups, requirements: { id: %r{[^/]+} } do
desc 'Get a list of group issues' do desc 'Get a list of group issues' do
success ::API::Entities::Issue success ::API::V3::Entities::Issue
end end
params do params do
optional :state, type: String, values: %w[opened closed all], default: 'opened', optional :state, type: String, values: %w[opened closed all], default: 'opened',
...@@ -83,7 +84,7 @@ module API ...@@ -83,7 +84,7 @@ module API
issues = find_issues(group_id: group.id, state: params[:state] || 'opened', match_all_labels: true) issues = find_issues(group_id: group.id, state: params[:state] || 'opened', match_all_labels: true)
present paginate(issues), with: ::API::Entities::Issue, current_user: current_user present paginate(issues), with: ::API::V3::Entities::Issue, current_user: current_user
end end
end end
...@@ -95,7 +96,7 @@ module API ...@@ -95,7 +96,7 @@ module API
desc 'Get a list of project issues' do desc 'Get a list of project issues' do
detail 'iid filter is deprecated have been removed on V4' detail 'iid filter is deprecated have been removed on V4'
success ::API::Entities::Issue success ::API::V3::Entities::Issue
end end
params do params do
optional :state, type: String, values: %w[opened closed all], default: 'all', optional :state, type: String, values: %w[opened closed all], default: 'all',
...@@ -108,22 +109,22 @@ module API ...@@ -108,22 +109,22 @@ module API
issues = find_issues(project_id: project.id) issues = find_issues(project_id: project.id)
present paginate(issues), with: ::API::Entities::Issue, current_user: current_user, project: user_project present paginate(issues), with: ::API::V3::Entities::Issue, current_user: current_user, project: user_project
end end
desc 'Get a single project issue' do desc 'Get a single project issue' do
success ::API::Entities::Issue success ::API::V3::Entities::Issue
end end
params do params do
requires :issue_id, type: Integer, desc: 'The ID of a project issue' requires :issue_id, type: Integer, desc: 'The ID of a project issue'
end end
get ":id/issues/:issue_id" do get ":id/issues/:issue_id" do
issue = find_project_issue(params[:issue_id]) issue = find_project_issue(params[:issue_id])
present issue, with: ::API::Entities::Issue, current_user: current_user, project: user_project present issue, with: ::API::V3::Entities::Issue, current_user: current_user, project: user_project
end end
desc 'Create a new project issue' do desc 'Create a new project issue' do
success ::API::Entities::Issue success ::API::V3::Entities::Issue
end end
params do params do
requires :title, type: String, desc: 'The title of an issue' requires :title, type: String, desc: 'The title of an issue'
...@@ -141,6 +142,7 @@ module API ...@@ -141,6 +142,7 @@ module API
issue_params = declared_params(include_missing: false) issue_params = declared_params(include_missing: false)
issue_params = issue_params.merge(merge_request_to_resolve_discussions_of: issue_params.delete(:merge_request_for_resolving_discussions)) issue_params = issue_params.merge(merge_request_to_resolve_discussions_of: issue_params.delete(:merge_request_for_resolving_discussions))
issue_params = convert_parameters_from_legacy_format(issue_params)
issue = ::Issues::CreateService.new(user_project, issue = ::Issues::CreateService.new(user_project,
current_user, current_user,
...@@ -148,14 +150,14 @@ module API ...@@ -148,14 +150,14 @@ module API
render_spam_error! if issue.spam? render_spam_error! if issue.spam?
if issue.valid? if issue.valid?
present issue, with: ::API::Entities::Issue, current_user: current_user, project: user_project present issue, with: ::API::V3::Entities::Issue, current_user: current_user, project: user_project
else else
render_validation_error!(issue) render_validation_error!(issue)
end end
end end
desc 'Update an existing issue' do desc 'Update an existing issue' do
success ::API::Entities::Issue success ::API::V3::Entities::Issue
end end
params do params do
requires :issue_id, type: Integer, desc: 'The ID of a project issue' requires :issue_id, type: Integer, desc: 'The ID of a project issue'
...@@ -178,6 +180,7 @@ module API ...@@ -178,6 +180,7 @@ module API
end end
update_params = declared_params(include_missing: false).merge(request: request, api: true) update_params = declared_params(include_missing: false).merge(request: request, api: true)
update_params = convert_parameters_from_legacy_format(update_params)
issue = ::Issues::UpdateService.new(user_project, issue = ::Issues::UpdateService.new(user_project,
current_user, current_user,
...@@ -186,14 +189,14 @@ module API ...@@ -186,14 +189,14 @@ module API
render_spam_error! if issue.spam? render_spam_error! if issue.spam?
if issue.valid? if issue.valid?
present issue, with: ::API::Entities::Issue, current_user: current_user, project: user_project present issue, with: ::API::V3::Entities::Issue, current_user: current_user, project: user_project
else else
render_validation_error!(issue) render_validation_error!(issue)
end end
end end
desc 'Move an existing issue' do desc 'Move an existing issue' do
success ::API::Entities::Issue success ::API::V3::Entities::Issue
end end
params do params do
requires :issue_id, type: Integer, desc: 'The ID of a project issue' requires :issue_id, type: Integer, desc: 'The ID of a project issue'
...@@ -208,7 +211,7 @@ module API ...@@ -208,7 +211,7 @@ module API
begin begin
issue = ::Issues::MoveService.new(user_project, current_user).execute(issue, new_project) issue = ::Issues::MoveService.new(user_project, current_user).execute(issue, new_project)
present issue, with: ::API::Entities::Issue, current_user: current_user, project: user_project present issue, with: ::API::V3::Entities::Issue, current_user: current_user, project: user_project
rescue ::Issues::MoveService::MoveError => error rescue ::Issues::MoveService::MoveError => error
render_api_error!(error.message, 400) render_api_error!(error.message, 400)
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment