From d66d6d6bd6feb11b30d7cbf7236a37a2ce9c388f Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 12 Dec 2021 19:13:16 +0000 Subject: [PATCH] Update use of links on relationships --- app/serializers/api/v1/base_serializer.rb | 13 +++++++++++++ app/serializers/api/v1/customer_serializer.rb | 10 ++++++---- app/serializers/api/v1/enterprise_serializer.rb | 15 +++++++++++++++ spec/requests/api/v1/customers_spec.rb | 3 +++ 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 app/serializers/api/v1/base_serializer.rb create mode 100644 app/serializers/api/v1/enterprise_serializer.rb diff --git a/app/serializers/api/v1/base_serializer.rb b/app/serializers/api/v1/base_serializer.rb new file mode 100644 index 0000000000..4689406779 --- /dev/null +++ b/app/serializers/api/v1/base_serializer.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Api + module V1 + class BaseSerializer + include JSONAPI::Serializer + + def self.url_helpers + Rails.application.routes.url_helpers + end + end + end +end diff --git a/app/serializers/api/v1/customer_serializer.rb b/app/serializers/api/v1/customer_serializer.rb index cea4d53d2e..6f71b39159 100644 --- a/app/serializers/api/v1/customer_serializer.rb +++ b/app/serializers/api/v1/customer_serializer.rb @@ -2,12 +2,14 @@ module Api module V1 - class CustomerSerializer - include JSONAPI::Serializer - + class CustomerSerializer < BaseSerializer attributes :id, :enterprise_id, :first_name, :last_name, :code, :email - belongs_to :enterprise, record_type: :enterprise, serializer: :id + belongs_to :enterprise, links: { + related: ->(object) { + url_helpers.api_v1_enterprise_url(id: object.enterprise_id) + } + } end end end diff --git a/app/serializers/api/v1/enterprise_serializer.rb b/app/serializers/api/v1/enterprise_serializer.rb new file mode 100644 index 0000000000..abbb9cdd3c --- /dev/null +++ b/app/serializers/api/v1/enterprise_serializer.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Api + module V1 + class EnterpriseSerializer < BaseSerializer + attributes :id, :name + + has_many :customers, links: { + related: ->(object) { + url_helpers.api_v1_enterprise_customers_url(enterprise_id: object.id) + } + } + end + end +end diff --git a/spec/requests/api/v1/customers_spec.rb b/spec/requests/api/v1/customers_spec.rb index 9141a49c1e..58c9f7e60a 100644 --- a/spec/requests/api/v1/customers_spec.rb +++ b/spec/requests/api/v1/customers_spec.rb @@ -128,6 +128,9 @@ describe "Customers", type: :request do "data" => { "id" => customer1.enterprise_id.to_s, "type" => "enterprise" + }, + "links" => { + "related" => "http://test.host/api/v1/enterprises/#{customer1.enterprise_id}" } }