diff --git a/app/controllers/departments_controller.rb b/app/controllers/departments_controller.rb index e6f2ea9..dc85c97 100644 --- a/app/controllers/departments_controller.rb +++ b/app/controllers/departments_controller.rb @@ -10,12 +10,16 @@ def index # GET /departments/1 def show - render json: @department end private # Use callbacks to share common setup or constraints between actions. def set_department - @department = Department.find(params.expect(:id)) + id = params.expect(:id) + if id.match(/[0-9]/) + @department = Department.find(id) + else + @department = Department.find_by(slug: id) + end end end diff --git a/app/controllers/promises_controller.rb b/app/controllers/promises_controller.rb index d5b73f7..92da07a 100644 --- a/app/controllers/promises_controller.rb +++ b/app/controllers/promises_controller.rb @@ -6,6 +6,5 @@ def index def show @promise = Promise.find(params[:id]) - render json: @promise end end diff --git a/app/models/department.rb b/app/models/department.rb index 00c9e52..a864c96 100644 --- a/app/models/department.rb +++ b/app/models/department.rb @@ -1,6 +1,8 @@ class Department < ApplicationRecord belongs_to :government - has_many :ministers + has_many :officials, class_name: "Minister", dependent: :destroy + has_one :minister, -> { where(role: "Minister") }, class_name: "Minister" + has_many :department_promises, dependent: :destroy has_many :promises, through: :department_promises diff --git a/app/views/departments/show.json.jbuilder b/app/views/departments/show.json.jbuilder new file mode 100644 index 0000000..44dfbd2 --- /dev/null +++ b/app/views/departments/show.json.jbuilder @@ -0,0 +1,14 @@ + +json.(@department, :slug, :display_name, :official_name, :priority) + +json.minister do + if @department.minister.present? + json.partial! @department.minister, as: :minister + else + json.null! + end +end + +json.promises do + json.partial! "promises/promise_listing", collection: @department.lead_promises, as: :promise +end diff --git a/app/views/ministers/_minister.json.jbuilder b/app/views/ministers/_minister.json.jbuilder new file mode 100644 index 0000000..e4ca7cd --- /dev/null +++ b/app/views/ministers/_minister.json.jbuilder @@ -0,0 +1,10 @@ +json.(minister, + :order_of_precedence, + :started_at, + :ended_at, + :first_name, + :last_name, + :last_name, + :title, + :avatar_url, + :person_short_honorific) diff --git a/app/views/promises/_promise_listing.json.jbuilder b/app/views/promises/_promise_listing.json.jbuilder new file mode 100644 index 0000000..5beddb3 --- /dev/null +++ b/app/views/promises/_promise_listing.json.jbuilder @@ -0,0 +1,25 @@ +# Need: status, last_update, title, description, build_canada_alignment, impact, +# + + +json.(promise, + :id, + :concise_title, + :description, + :text +) + +# TODO: cache this on promise so we don't have to query the database every time +json.last_evidence_at promise.evidences.order(updated_at: :desc).first&.updated_at&.strftime("%Y-%m-%d") + +json.(promise, + :bc_promise_direction, + :bc_promise_rank, + :bc_promise_rank_rationale +) + +json.(promise, + :progress_score, + :progress_summary, + + ) diff --git a/app/views/promises/show.json.jbuilder b/app/views/promises/show.json.jbuilder new file mode 100644 index 0000000..6dd8b89 --- /dev/null +++ b/app/views/promises/show.json.jbuilder @@ -0,0 +1,16 @@ + +json.(@promise, + :id, + :text, + :description, + :commitment_history_rationale, + :what_it_means_for_canadians, + :concise_title, + :progress_score, + :progress_summary, + :source_type, + :date_issued, +) + +# TODO: cache this on promise so we don't have to query the database every time +json.last_evidence_at @promise.evidences.order(updated_at: :desc).first&.updated_at&.strftime("%Y-%m-%d")