From c94b527ea29ca0142e3916111258135218fe5259 Mon Sep 17 00:00:00 2001 From: Matt Beanland Date: Tue, 21 Oct 2025 10:52:24 +1030 Subject: [PATCH 1/2] improve with chains --- lib/access/resources/cable.ex | 37 ++++++++++++++----------------- lib/access/resources/card.ex | 37 ++++++++++++++----------------- lib/access/resources/path.ex | 31 ++++++++++++-------------- lib/access/resources/shelf.ex | 37 ++++++++++++++----------------- lib/access/services/dsl_access.ex | 28 +++++++++++------------ 5 files changed, 78 insertions(+), 92 deletions(-) diff --git a/lib/access/resources/cable.ex b/lib/access/resources/cable.ex index bca2f9d..b21e2b6 100644 --- a/lib/access/resources/cable.ex +++ b/lib/access/resources/cable.ex @@ -64,17 +64,14 @@ defmodule DiffoExample.Access.Cable do end) change after_action(fn changeset, result, _context -> - with {:ok, with_specification} <- Specification.relate_instance(result, changeset), - {:ok, with_relationships} <- - Relationship.relate_instance(with_specification, changeset), - {:ok, with_features} <- - Feature.relate_instance(with_relationships, changeset), - {:ok, with_characteristics} <- - Characteristic.relate_instance(with_features, changeset), - {:ok, with_places} <- Place.relate_instance(with_characteristics, changeset), - {:ok, _with_parties} <- Party.relate_instance(with_places, changeset), - {:ok, cable} <- Access.get_cable_by_id(result.id), - do: {:ok, cable} + with {:ok, result} <- Specification.relate_instance(result, changeset), + {:ok, result} <- Relationship.relate_instance(result, changeset), + {:ok, result} <- Feature.relate_instance(result, changeset), + {:ok, result} <- Characteristic.relate_instance(result, changeset), + {:ok, result} <- Place.relate_instance(result, changeset), + {:ok, result} <- Party.relate_instance(result, changeset), + {:ok, result} <- Access.get_cable_by_id(result.id), + do: {:ok, result} end) change load [:href] @@ -86,9 +83,9 @@ defmodule DiffoExample.Access.Cable do argument :characteristic_value_updates, {:array, :term} change after_action(fn changeset, result, _context -> - with {:ok, _result} <- Characteristic.update_values(result, changeset), - {:ok, cable} <- Access.get_cable_by_id(result.id), - do: {:ok, cable} + with {:ok, result} <- Characteristic.update_values(result, changeset), + {:ok, result} <- Access.get_cable_by_id(result.id), + do: {:ok, result} end) end @@ -97,9 +94,9 @@ defmodule DiffoExample.Access.Cable do argument :relationships, {:array, :struct} change after_action(fn changeset, result, _context -> - with {:ok, _cable} <- Relationship.relate_instance(result, changeset), - {:ok, cable} <- Access.get_cable_by_id(result.id), - do: {:ok, cable} + with {:ok, result} <- Relationship.relate_instance(result, changeset), + {:ok, result} <- Access.get_cable_by_id(result.id), + do: {:ok, result} end) end @@ -108,9 +105,9 @@ defmodule DiffoExample.Access.Cable do argument :assignment, :struct, constraints: [instance_of: Assignment] change after_action(fn changeset, result, _context -> - with {:ok, _cable} <- Assigner.assign(result, changeset, :pairs, :pair), - {:ok, cable} <- Access.get_cable_by_id(result.id), - do: {:ok, cable} + with {:ok, result} <- Assigner.assign(result, changeset, :pairs, :pair), + {:ok, result} <- Access.get_cable_by_id(result.id), + do: {:ok, result} end) end end diff --git a/lib/access/resources/card.ex b/lib/access/resources/card.ex index 44015d8..cfb512c 100644 --- a/lib/access/resources/card.ex +++ b/lib/access/resources/card.ex @@ -64,17 +64,14 @@ defmodule DiffoExample.Access.Card do end) change after_action(fn changeset, result, _context -> - with {:ok, with_specification} <- Specification.relate_instance(result, changeset), - {:ok, with_relationships} <- - Relationship.relate_instance(with_specification, changeset), - {:ok, with_features} <- - Feature.relate_instance(with_relationships, changeset), - {:ok, with_characteristics} <- - Characteristic.relate_instance(with_features, changeset), - {:ok, with_places} <- Place.relate_instance(with_characteristics, changeset), - {:ok, _with_parties} <- Party.relate_instance(with_places, changeset), - {:ok, card} <- Access.get_card_by_id(result.id), - do: {:ok, card} + with {:ok, result} <- Specification.relate_instance(result, changeset), + {:ok, result} <- Relationship.relate_instance(result, changeset), + {:ok, result} <- Feature.relate_instance(result, changeset), + {:ok, result} <- Characteristic.relate_instance(result, changeset), + {:ok, result} <- Place.relate_instance(result, changeset), + {:ok, result} <- Party.relate_instance(result, changeset), + {:ok, result} <- Access.get_card_by_id(result.id), + do: {:ok, result} end) change load [:href] @@ -86,9 +83,9 @@ defmodule DiffoExample.Access.Card do argument :characteristic_value_updates, {:array, :term} change after_action(fn changeset, result, _context -> - with {:ok, _result} <- Characteristic.update_values(result, changeset), - {:ok, card} <- Access.get_card_by_id(result.id), - do: {:ok, card} + with {:ok, result} <- Characteristic.update_values(result, changeset), + {:ok, result} <- Access.get_card_by_id(result.id), + do: {:ok, result} end) end @@ -97,9 +94,9 @@ defmodule DiffoExample.Access.Card do argument :relationships, {:array, :struct} change after_action(fn changeset, result, _context -> - with {:ok, _card} <- Relationship.relate_instance(result, changeset), - {:ok, card} <- Access.get_card_by_id(result.id), - do: {:ok, card} + with {:ok, result} <- Relationship.relate_instance(result, changeset), + {:ok, result} <- Access.get_card_by_id(result.id), + do: {:ok, result} end) end @@ -108,9 +105,9 @@ defmodule DiffoExample.Access.Card do argument :assignment, :struct, constraints: [instance_of: Assignment] change after_action(fn changeset, result, _context -> - with {:ok, _card} <- Assigner.assign(result, changeset, :ports, :port), - {:ok, card} <- Access.get_card_by_id(result.id), - do: {:ok, card} + with {:ok, result} <- Assigner.assign(result, changeset, :ports, :port), + {:ok, result} <- Access.get_card_by_id(result.id), + do: {:ok, result} end) end end diff --git a/lib/access/resources/path.ex b/lib/access/resources/path.ex index f2f185a..5b1ca6a 100644 --- a/lib/access/resources/path.ex +++ b/lib/access/resources/path.ex @@ -61,17 +61,14 @@ defmodule DiffoExample.Access.Path do end) change after_action(fn changeset, result, _context -> - with {:ok, with_specification} <- Specification.relate_instance(result, changeset), - {:ok, with_relationships} <- - Relationship.relate_instance(with_specification, changeset), - {:ok, with_features} <- - Feature.relate_instance(with_relationships, changeset), - {:ok, with_characteristics} <- - Characteristic.relate_instance(with_features, changeset), - {:ok, with_places} <- Place.relate_instance(with_characteristics, changeset), - {:ok, _with_parties} <- Party.relate_instance(with_places, changeset), - {:ok, path} <- Access.get_path_by_id(result.id), - do: {:ok, path} + with {:ok, result} <- Specification.relate_instance(result, changeset), + {:ok, result} <- Relationship.relate_instance(result, changeset), + {:ok, result} <- Feature.relate_instance(result, changeset), + {:ok, result} <- Characteristic.relate_instance(result, changeset), + {:ok, result} <- Place.relate_instance(result, changeset), + {:ok, result} <- Party.relate_instance(result, changeset), + {:ok, result} <- Access.get_path_by_id(result.id), + do: {:ok, result} end) change load [:href] @@ -83,9 +80,9 @@ defmodule DiffoExample.Access.Path do argument :characteristic_value_updates, {:array, :term} change after_action(fn changeset, result, _context -> - with {:ok, _result} <- Characteristic.update_values(result, changeset), - {:ok, path} <- Access.get_path_by_id(result.id), - do: {:ok, path} + with {:ok, result} <- Characteristic.update_values(result, changeset), + {:ok, result} <- Access.get_path_by_id(result.id), + do: {:ok, result} end) end @@ -94,9 +91,9 @@ defmodule DiffoExample.Access.Path do argument :relationships, {:array, :struct} change after_action(fn changeset, result, _context -> - with {:ok, _path} <- Relationship.relate_instance(result, changeset), - {:ok, path} <- Access.get_path_by_id(result.id), - do: {:ok, path} + with {:ok, result} <- Relationship.relate_instance(result, changeset), + {:ok, result} <- Access.get_path_by_id(result.id), + do: {:ok, result} end) end end diff --git a/lib/access/resources/shelf.ex b/lib/access/resources/shelf.ex index d5c352f..bd324d9 100644 --- a/lib/access/resources/shelf.ex +++ b/lib/access/resources/shelf.ex @@ -64,17 +64,14 @@ defmodule DiffoExample.Access.Shelf do end) change after_action(fn changeset, result, _context -> - with {:ok, with_specification} <- Specification.relate_instance(result, changeset), - {:ok, with_relationships} <- - Relationship.relate_instance(with_specification, changeset), - {:ok, with_features} <- - Feature.relate_instance(with_relationships, changeset), - {:ok, with_characteristics} <- - Characteristic.relate_instance(with_features, changeset), - {:ok, with_places} <- Place.relate_instance(with_characteristics, changeset), - {:ok, _with_parties} <- Party.relate_instance(with_places, changeset), - {:ok, shelf} <- Access.get_shelf_by_id(result.id), - do: {:ok, shelf} + with {:ok, result} <- Specification.relate_instance(result, changeset), + {:ok, result} <- Relationship.relate_instance(result, changeset), + {:ok, result} <- Feature.relate_instance(result, changeset), + {:ok, result} <- Characteristic.relate_instance(result, changeset), + {:ok, result} <- Place.relate_instance(result, changeset), + {:ok, result} <- Party.relate_instance(result, changeset), + {:ok, result} <- Access.get_shelf_by_id(result.id), + do: {:ok, result} end) change load [:href] @@ -86,9 +83,9 @@ defmodule DiffoExample.Access.Shelf do argument :characteristic_value_updates, {:array, :term} change after_action(fn changeset, result, _context -> - with {:ok, _result} <- Characteristic.update_values(result, changeset), - {:ok, card} <- Access.get_shelf_by_id(result.id), - do: {:ok, card} + with {:ok, result} <- Characteristic.update_values(result, changeset), + {:ok, result} <- Access.get_shelf_by_id(result.id), + do: {:ok, result} end) end @@ -97,9 +94,9 @@ defmodule DiffoExample.Access.Shelf do argument :relationships, {:array, :struct} change after_action(fn changeset, result, _context -> - with {:ok, _shelf} <- Relationship.relate_instance(result, changeset), - {:ok, shelf} <- Access.get_shelf_by_id(result.id), - do: {:ok, shelf} + with {:ok, result} <- Relationship.relate_instance(result, changeset), + {:ok, result} <- Access.get_shelf_by_id(result.id), + do: {:ok, result} end) end @@ -108,9 +105,9 @@ defmodule DiffoExample.Access.Shelf do argument :assignment, :struct, constraints: [instance_of: Assignment] change after_action(fn changeset, result, _context -> - with {:ok, _card} <- Assigner.assign(result, changeset, :slots, :slot), - {:ok, card} <- Access.get_shelf_by_id(result.id), - do: {:ok, card} + with {:ok, result} <- Assigner.assign(result, changeset, :slots, :slot), + {:ok, result} <- Access.get_shelf_by_id(result.id), + do: {:ok, result} end) end end diff --git a/lib/access/services/dsl_access.ex b/lib/access/services/dsl_access.ex index a8cebd3..44ff9ac 100644 --- a/lib/access/services/dsl_access.ex +++ b/lib/access/services/dsl_access.ex @@ -72,15 +72,13 @@ defmodule DiffoExample.Access.DslAccess do end) change after_action(fn changeset, result, _context -> - with {:ok, with_specification} <- Specification.relate_instance(result, changeset), - {:ok, with_features} <- - Feature.relate_instance(with_specification, changeset), - {:ok, with_characteristics} <- - Characteristic.relate_instance(with_features, changeset), - {:ok, with_parties} <- Party.relate_instance(with_characteristics, changeset), - {:ok, _with_places} <- Place.relate_instance(with_parties, changeset), - {:ok, dsl_access} <- Access.get_dsl_by_id(result.id), - do: {:ok, dsl_access} + with {:ok, result} <- Specification.relate_instance(result, changeset), + {:ok, result} <- Feature.relate_instance(result, changeset), + {:ok, result} <- Characteristic.relate_instance(result, changeset), + {:ok, result} <- Party.relate_instance(result, changeset), + {:ok, result} <- Place.relate_instance(result, changeset), + {:ok, result} <- Access.get_dsl_by_id(result.id), + do: {:ok, result} end) change load [:href] @@ -105,9 +103,9 @@ defmodule DiffoExample.Access.DslAccess do ]) change after_action(fn changeset, result, _context -> - with {:ok, _with_place} <- Place.relate_instance(result, changeset), - {:ok, dsl_access} <- Access.get_dsl_by_id(result.id), - do: {:ok, dsl_access} + with {:ok, result} <- Place.relate_instance(result, changeset), + {:ok, result} <- Access.get_dsl_by_id(result.id), + do: {:ok, result} end) end @@ -118,9 +116,9 @@ defmodule DiffoExample.Access.DslAccess do change transition_state(:reserved) change after_action(fn changeset, result, _context -> - with {:ok, _result} <- Characteristic.update_values(result, changeset), - {:ok, dsl_access} <- Access.get_dsl_by_id(result.id), - do: {:ok, dsl_access} + with {:ok, result} <- Characteristic.update_values(result, changeset), + {:ok, result} <- Access.get_dsl_by_id(result.id), + do: {:ok, result} end) end end From 635eb0f4860ef63465505815bfb214db01696432 Mon Sep 17 00:00:00 2001 From: Matt Beanland Date: Tue, 21 Oct 2025 15:25:08 +1030 Subject: [PATCH 2/2] added ActionHelper --- lib/access/action_helper.ex | 43 +++++++++++++++++++++++++++++++ lib/access/resources/cable.ex | 21 +++------------ lib/access/resources/card.ex | 21 +++------------ lib/access/resources/path.ex | 21 +++------------ lib/access/resources/shelf.ex | 21 +++------------ lib/access/services/dsl_access.ex | 19 +++----------- 6 files changed, 58 insertions(+), 88 deletions(-) create mode 100644 lib/access/action_helper.ex diff --git a/lib/access/action_helper.ex b/lib/access/action_helper.ex new file mode 100644 index 0000000..9e4697c --- /dev/null +++ b/lib/access/action_helper.ex @@ -0,0 +1,43 @@ +# SPDX-FileCopyrightText: 2025 diffo_example contributors +# +# SPDX-License-Identifier: MIT + +defmodule DiffoExample.Access.ActionHelper do + @moduledoc """ + Diffo - TMF Service and Resource Management with a difference + + ActionHelper - helping with actions + """ + + alias Diffo.Provider.Instance.Specification + alias Diffo.Provider.Instance.Relationship + alias Diffo.Provider.Instance.Feature + alias Diffo.Provider.Instance.Characteristic + alias Diffo.Provider.Instance.Place + alias Diffo.Provider.Instance.Party + alias DiffoExample.Access + + @doc """ + build before_action helper, injects instance dsl configuration into the changeset + """ + def build_before(changeset) do + changeset + |> Specification.set_specified_by_argument() + |> Feature.set_features_argument() + |> Characteristic.set_characteristics_argument() + end + + @doc """ + build after_action helper, relates TMF entities to the new instance + """ + def build_after(changeset, result, get_by_id_method) do + with {:ok, result} <- Specification.relate_instance(result, changeset), + {:ok, result} <- Relationship.relate_instance(result, changeset), + {:ok, result} <- Feature.relate_instance(result, changeset), + {:ok, result} <- Characteristic.relate_instance(result, changeset), + {:ok, result} <- Place.relate_instance(result, changeset), + {:ok, result} <- Party.relate_instance(result, changeset), + {:ok, result} <- apply(Access, get_by_id_method, [result.id]), + do: {:ok, result} + end +end diff --git a/lib/access/resources/cable.ex b/lib/access/resources/cable.ex index b21e2b6..195193b 100644 --- a/lib/access/resources/cable.ex +++ b/lib/access/resources/cable.ex @@ -10,16 +10,13 @@ defmodule DiffoExample.Access.Cable do """ alias Diffo.Provider.BaseInstance - alias Diffo.Provider.Instance.Specification alias Diffo.Provider.Instance.Relationship - alias Diffo.Provider.Instance.Feature alias Diffo.Provider.Instance.Characteristic - alias Diffo.Provider.Instance.Place - alias Diffo.Provider.Instance.Party alias Diffo.Provider.Assigner alias Diffo.Provider.Assignment alias DiffoExample.Access + alias DiffoExample.Access.ActionHelper use Ash.Resource, fragments: [BaseInstance], @@ -56,22 +53,10 @@ defmodule DiffoExample.Access.Cable do change set_attribute(:type, :resource) - change before_action(fn changeset, _context -> - changeset - |> Specification.set_specified_by_argument() - |> Feature.set_features_argument() - |> Characteristic.set_characteristics_argument() - end) + change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end) change after_action(fn changeset, result, _context -> - with {:ok, result} <- Specification.relate_instance(result, changeset), - {:ok, result} <- Relationship.relate_instance(result, changeset), - {:ok, result} <- Feature.relate_instance(result, changeset), - {:ok, result} <- Characteristic.relate_instance(result, changeset), - {:ok, result} <- Place.relate_instance(result, changeset), - {:ok, result} <- Party.relate_instance(result, changeset), - {:ok, result} <- Access.get_cable_by_id(result.id), - do: {:ok, result} + ActionHelper.build_after(changeset, result, :get_cable_by_id) end) change load [:href] diff --git a/lib/access/resources/card.ex b/lib/access/resources/card.ex index cfb512c..5f1aa75 100644 --- a/lib/access/resources/card.ex +++ b/lib/access/resources/card.ex @@ -10,16 +10,13 @@ defmodule DiffoExample.Access.Card do """ alias Diffo.Provider.BaseInstance - alias Diffo.Provider.Instance.Specification alias Diffo.Provider.Instance.Relationship - alias Diffo.Provider.Instance.Feature alias Diffo.Provider.Instance.Characteristic - alias Diffo.Provider.Instance.Place - alias Diffo.Provider.Instance.Party alias Diffo.Provider.Assigner alias Diffo.Provider.Assignment alias DiffoExample.Access + alias DiffoExample.Access.ActionHelper use Ash.Resource, fragments: [BaseInstance], @@ -56,22 +53,10 @@ defmodule DiffoExample.Access.Card do change set_attribute(:type, :resource) - change before_action(fn changeset, _context -> - changeset - |> Specification.set_specified_by_argument() - |> Feature.set_features_argument() - |> Characteristic.set_characteristics_argument() - end) + change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end) change after_action(fn changeset, result, _context -> - with {:ok, result} <- Specification.relate_instance(result, changeset), - {:ok, result} <- Relationship.relate_instance(result, changeset), - {:ok, result} <- Feature.relate_instance(result, changeset), - {:ok, result} <- Characteristic.relate_instance(result, changeset), - {:ok, result} <- Place.relate_instance(result, changeset), - {:ok, result} <- Party.relate_instance(result, changeset), - {:ok, result} <- Access.get_card_by_id(result.id), - do: {:ok, result} + ActionHelper.build_after(changeset, result, :get_card_by_id) end) change load [:href] diff --git a/lib/access/resources/path.ex b/lib/access/resources/path.ex index 5b1ca6a..2b9f5ae 100644 --- a/lib/access/resources/path.ex +++ b/lib/access/resources/path.ex @@ -10,14 +10,11 @@ defmodule DiffoExample.Access.Path do """ alias Diffo.Provider.BaseInstance - alias Diffo.Provider.Instance.Specification alias Diffo.Provider.Instance.Relationship - alias Diffo.Provider.Instance.Feature alias Diffo.Provider.Instance.Characteristic - alias Diffo.Provider.Instance.Place - alias Diffo.Provider.Instance.Party alias DiffoExample.Access + alias DiffoExample.Access.ActionHelper use Ash.Resource, fragments: [BaseInstance], @@ -53,22 +50,10 @@ defmodule DiffoExample.Access.Path do change set_attribute(:type, :resource) - change before_action(fn changeset, _context -> - changeset - |> Specification.set_specified_by_argument() - |> Feature.set_features_argument() - |> Characteristic.set_characteristics_argument() - end) + change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end) change after_action(fn changeset, result, _context -> - with {:ok, result} <- Specification.relate_instance(result, changeset), - {:ok, result} <- Relationship.relate_instance(result, changeset), - {:ok, result} <- Feature.relate_instance(result, changeset), - {:ok, result} <- Characteristic.relate_instance(result, changeset), - {:ok, result} <- Place.relate_instance(result, changeset), - {:ok, result} <- Party.relate_instance(result, changeset), - {:ok, result} <- Access.get_path_by_id(result.id), - do: {:ok, result} + ActionHelper.build_after(changeset, result, :get_path_by_id) end) change load [:href] diff --git a/lib/access/resources/shelf.ex b/lib/access/resources/shelf.ex index bd324d9..365d37f 100644 --- a/lib/access/resources/shelf.ex +++ b/lib/access/resources/shelf.ex @@ -10,16 +10,13 @@ defmodule DiffoExample.Access.Shelf do """ alias Diffo.Provider.BaseInstance - alias Diffo.Provider.Instance.Specification alias Diffo.Provider.Instance.Relationship - alias Diffo.Provider.Instance.Feature alias Diffo.Provider.Instance.Characteristic - alias Diffo.Provider.Instance.Place - alias Diffo.Provider.Instance.Party alias Diffo.Provider.Assigner alias Diffo.Provider.Assignment alias DiffoExample.Access + alias DiffoExample.Access.ActionHelper use Ash.Resource, fragments: [BaseInstance], @@ -56,22 +53,10 @@ defmodule DiffoExample.Access.Shelf do change set_attribute(:type, :resource) - change before_action(fn changeset, _context -> - changeset - |> Specification.set_specified_by_argument() - |> Feature.set_features_argument() - |> Characteristic.set_characteristics_argument() - end) + change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end) change after_action(fn changeset, result, _context -> - with {:ok, result} <- Specification.relate_instance(result, changeset), - {:ok, result} <- Relationship.relate_instance(result, changeset), - {:ok, result} <- Feature.relate_instance(result, changeset), - {:ok, result} <- Characteristic.relate_instance(result, changeset), - {:ok, result} <- Place.relate_instance(result, changeset), - {:ok, result} <- Party.relate_instance(result, changeset), - {:ok, result} <- Access.get_shelf_by_id(result.id), - do: {:ok, result} + ActionHelper.build_after(changeset, result, :get_shelf_by_id) end) change load [:href] diff --git a/lib/access/services/dsl_access.ex b/lib/access/services/dsl_access.ex index 44ff9ac..f10f40e 100644 --- a/lib/access/services/dsl_access.ex +++ b/lib/access/services/dsl_access.ex @@ -10,12 +10,10 @@ defmodule DiffoExample.Access.DslAccess do """ alias Diffo.Provider.BaseInstance - alias Diffo.Provider.Instance.Specification - alias Diffo.Provider.Instance.Feature alias Diffo.Provider.Instance.Characteristic - alias Diffo.Provider.Instance.Party alias Diffo.Provider.Instance.Place alias DiffoExample.Access + alias DiffoExample.Access.ActionHelper use Ash.Resource, fragments: [BaseInstance], @@ -64,21 +62,10 @@ defmodule DiffoExample.Access.DslAccess do argument :characteristics, {:array, :uuid}, public?: false argument :features, {:array, :uuid}, public?: false - change before_action(fn changeset, _context -> - changeset - |> Specification.set_specified_by_argument() - |> Feature.set_features_argument() - |> Characteristic.set_characteristics_argument() - end) + change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end) change after_action(fn changeset, result, _context -> - with {:ok, result} <- Specification.relate_instance(result, changeset), - {:ok, result} <- Feature.relate_instance(result, changeset), - {:ok, result} <- Characteristic.relate_instance(result, changeset), - {:ok, result} <- Party.relate_instance(result, changeset), - {:ok, result} <- Place.relate_instance(result, changeset), - {:ok, result} <- Access.get_dsl_by_id(result.id), - do: {:ok, result} + ActionHelper.build_after(changeset, result, :get_dsl_by_id) end) change load [:href]