Skip to content
7 changes: 6 additions & 1 deletion app/controllers/api/v2/plans_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ module Api
module V2
class PlansController < BaseApiController # rubocop:todo Style/Documentation
respond_to :json
before_action :set_complete_param, only: %i[show index]

# GET /api/v2/plans/:id
def show
raise Pundit::NotAuthorizedError unless @scopes.include?('read')

@plan = Plan.find_by(id: params[:id])
@plan = Plan.includes(roles: :user).find_by(id: params[:id])

raise Pundit::NotAuthorizedError unless @plan.present?

Expand All @@ -28,6 +29,10 @@ def index
@items = paginate_response(results: @plans)
render '/api/v2/plans/index', status: :ok
end

def set_complete_param
@complete = params[:complete].to_s.downcase == 'true'
end
end
end
end
23 changes: 21 additions & 2 deletions app/presenters/api/v2/plan_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ module Api
module V2
# Helper class for the API V2 project / DMP
class PlanPresenter
attr_reader :data_contact, :contributors, :costs
attr_reader :data_contact, :contributors, :costs, :complete_plan_data

def initialize(plan:)
def initialize(plan:, complete: false)
@contributors = []
return unless plan.present?

Expand All @@ -22,6 +22,8 @@ def initialize(plan:)
end

@costs = plan_costs(plan: @plan)

@complete_plan_data = fetch_all_q_and_a if complete
end

# Extract the ARK or DOI for the DMP OR use its URL if none exists
Expand Down Expand Up @@ -55,6 +57,23 @@ def plan_costs(plan:)
currency_code: 'usd', value: answer.text }
end
end

# Fetch all questions and answers from a plan, regardless of theme
def fetch_all_q_and_a
answers = @plan.answers.includes(:question)
return [] unless answers.present?

answers.filter_map do |answer|
q = answer.question
next unless q.present?

{
title: "Question #{q.number || q.id}",
question: q.text.to_s,
answer: answer.text.to_s
}
end
end
end
end
end
15 changes: 14 additions & 1 deletion app/views/api/v2/plans/_show.json.jbuilder
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

json.schema 'https://github.com/RDA-DMP-Common/RDA-DMP-Common-Standard/tree/master/examples/JSON/JSON-schema/1.0'

presenter = Api::V2::PlanPresenter.new(plan: plan)
presenter = Api::V2::PlanPresenter.new(plan: plan, complete: @complete)

# Note the symbol of the dmproadmap json object
# nested in extensions which is the container for the json template object, etc.
Expand Down Expand Up @@ -68,5 +68,18 @@ unless @minimal
json.title template.title
end
end

if @complete
json.complete_plan do
q_and_a = presenter.complete_plan_data
next if q_and_a.blank?

json.array! q_and_a do |item|
json.title item[:title]
json.question item[:question]
json.answer item[:answer]
end
end
end
end
end
Loading