From 16111c55ae6043ca3d17ecc1d52b46661e045077 Mon Sep 17 00:00:00 2001 From: Stephan Ellenberger Date: Mon, 29 Aug 2022 19:26:19 +0200 Subject: [PATCH] Serialized Cause endpoint and moved logic out of controller --- .../api/v2/campaign_actions_controller.rb | 2 +- .../api/v2/campaigns_controller.rb | 2 +- app/controllers/api/v2/causes_controller.rb | 23 ++----------------- .../api/v2/learning_resources_controller.rb | 2 +- app/serializers/v2/cause_serializer.rb | 11 +++++++++ app/services/v2/progress/user_progress.rb | 2 +- 6 files changed, 17 insertions(+), 25 deletions(-) create mode 100644 app/serializers/v2/cause_serializer.rb diff --git a/app/controllers/api/v2/campaign_actions_controller.rb b/app/controllers/api/v2/campaign_actions_controller.rb index 1634bbcd..f3a6073a 100644 --- a/app/controllers/api/v2/campaign_actions_controller.rb +++ b/app/controllers/api/v2/campaign_actions_controller.rb @@ -37,7 +37,7 @@ def merge_additional_fields(model) def get_campaign_action_causes(action_id) CampaignAction.find(action_id)&.causes.map do |cac| - cac.serializable_hash.symbolize_keys.merge({joined: get_status(cac.id, request)}) + cac.serializable_hash.symbolize_keys.merge({joined: get_status(cac.id, request, user)}) end end end diff --git a/app/controllers/api/v2/campaigns_controller.rb b/app/controllers/api/v2/campaigns_controller.rb index 93c695db..7133574b 100644 --- a/app/controllers/api/v2/campaigns_controller.rb +++ b/app/controllers/api/v2/campaigns_controller.rb @@ -52,7 +52,7 @@ def merge_additional_fields(model) def get_campaign_causes(campaign) campaign.causes.map do |cc| - cc.serializable_hash.symbolize_keys.merge({joined: get_status(cc.id, request)}) + cc.serializable_hash.symbolize_keys.merge({joined: get_status(cc.id, request, user)}) end end end diff --git a/app/controllers/api/v2/causes_controller.rb b/app/controllers/api/v2/causes_controller.rb index 272dcc03..b1ac61cb 100644 --- a/app/controllers/api/v2/causes_controller.rb +++ b/app/controllers/api/v2/causes_controller.rb @@ -1,30 +1,11 @@ # frozen_string_literal: true -include ::V2::Progress::UserProgress class Api::V2::CausesController < APIApplicationController def index - render json: { data: causes_data }, status: :ok + render json: Cause.all, root: :data, status: :ok, adapter: :json, request: request, user: user, each_serializer: V2::CauseSerializer end def show - render json: { data: cause_data }, status: :ok - end - -private - - def causes_data - Cause.all.map do |a| - a.serializable_hash.symbolize_keys.merge(additional_fields(a.id)) - end - end - - def cause_data - Cause.find(params[:id]).serializable_hash.symbolize_keys.merge(additional_fields(params[:id])) - end - - def additional_fields(cause_id) - { - joined: get_status(cause_id, request) - } + render json: Cause.find(params[:id]), root: :data, status: :ok, adapter: :json, request: request, user: user, serializer: V2::CauseSerializer end end diff --git a/app/controllers/api/v2/learning_resources_controller.rb b/app/controllers/api/v2/learning_resources_controller.rb index 664329b2..b2f8a4f9 100644 --- a/app/controllers/api/v2/learning_resources_controller.rb +++ b/app/controllers/api/v2/learning_resources_controller.rb @@ -37,7 +37,7 @@ def merge_additional_fields(model) def get_learning_resource_causes(learning_resource_id) LearningResource.find(learning_resource_id)&.causes.map do |lrc| - lrc.serializable_hash.symbolize_keys.merge({joined: get_status(lrc.id, request)}) + lrc.serializable_hash.symbolize_keys.merge({joined: get_status(lrc.id, request, user)}) end end end diff --git a/app/serializers/v2/cause_serializer.rb b/app/serializers/v2/cause_serializer.rb new file mode 100644 index 00000000..2b5895e9 --- /dev/null +++ b/app/serializers/v2/cause_serializer.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +include ::V2::Progress::UserProgress + +class V2::CauseSerializer < ActiveModel::Serializer + attributes :id, :image, :icon, :name, :description, :joiners, :created_at, :updated_at, :joined + + def joined + get_status(object.id, @instance_options[:request], @instance_options[:user]) + end +end diff --git a/app/services/v2/progress/user_progress.rb b/app/services/v2/progress/user_progress.rb index af52e755..7e20ac00 100644 --- a/app/services/v2/progress/user_progress.rb +++ b/app/services/v2/progress/user_progress.rb @@ -1,7 +1,7 @@ module V2 module Progress module UserProgress - def get_status(cause_id, request) + def get_status(cause_id, request, user) return 'Authentication failed' unless request.headers['token'] && user user.joined_cause?(cause_id.to_i)