Skip to content

Commit 635eb0f

Browse files
committed
added ActionHelper
1 parent c94b527 commit 635eb0f

6 files changed

Lines changed: 58 additions & 88 deletions

File tree

lib/access/action_helper.ex

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# SPDX-FileCopyrightText: 2025 diffo_example contributors <https://github.com/diffo-dev/diffo_example/graphs.contributors>
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
defmodule DiffoExample.Access.ActionHelper do
6+
@moduledoc """
7+
Diffo - TMF Service and Resource Management with a difference
8+
9+
ActionHelper - helping with actions
10+
"""
11+
12+
alias Diffo.Provider.Instance.Specification
13+
alias Diffo.Provider.Instance.Relationship
14+
alias Diffo.Provider.Instance.Feature
15+
alias Diffo.Provider.Instance.Characteristic
16+
alias Diffo.Provider.Instance.Place
17+
alias Diffo.Provider.Instance.Party
18+
alias DiffoExample.Access
19+
20+
@doc """
21+
build before_action helper, injects instance dsl configuration into the changeset
22+
"""
23+
def build_before(changeset) do
24+
changeset
25+
|> Specification.set_specified_by_argument()
26+
|> Feature.set_features_argument()
27+
|> Characteristic.set_characteristics_argument()
28+
end
29+
30+
@doc """
31+
build after_action helper, relates TMF entities to the new instance
32+
"""
33+
def build_after(changeset, result, get_by_id_method) do
34+
with {:ok, result} <- Specification.relate_instance(result, changeset),
35+
{:ok, result} <- Relationship.relate_instance(result, changeset),
36+
{:ok, result} <- Feature.relate_instance(result, changeset),
37+
{:ok, result} <- Characteristic.relate_instance(result, changeset),
38+
{:ok, result} <- Place.relate_instance(result, changeset),
39+
{:ok, result} <- Party.relate_instance(result, changeset),
40+
{:ok, result} <- apply(Access, get_by_id_method, [result.id]),
41+
do: {:ok, result}
42+
end
43+
end

lib/access/resources/cable.ex

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,13 @@ defmodule DiffoExample.Access.Cable do
1010
"""
1111

1212
alias Diffo.Provider.BaseInstance
13-
alias Diffo.Provider.Instance.Specification
1413
alias Diffo.Provider.Instance.Relationship
15-
alias Diffo.Provider.Instance.Feature
1614
alias Diffo.Provider.Instance.Characteristic
17-
alias Diffo.Provider.Instance.Place
18-
alias Diffo.Provider.Instance.Party
1915
alias Diffo.Provider.Assigner
2016
alias Diffo.Provider.Assignment
2117

2218
alias DiffoExample.Access
19+
alias DiffoExample.Access.ActionHelper
2320

2421
use Ash.Resource,
2522
fragments: [BaseInstance],
@@ -56,22 +53,10 @@ defmodule DiffoExample.Access.Cable do
5653

5754
change set_attribute(:type, :resource)
5855

59-
change before_action(fn changeset, _context ->
60-
changeset
61-
|> Specification.set_specified_by_argument()
62-
|> Feature.set_features_argument()
63-
|> Characteristic.set_characteristics_argument()
64-
end)
56+
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
6557

6658
change after_action(fn changeset, result, _context ->
67-
with {:ok, result} <- Specification.relate_instance(result, changeset),
68-
{:ok, result} <- Relationship.relate_instance(result, changeset),
69-
{:ok, result} <- Feature.relate_instance(result, changeset),
70-
{:ok, result} <- Characteristic.relate_instance(result, changeset),
71-
{:ok, result} <- Place.relate_instance(result, changeset),
72-
{:ok, result} <- Party.relate_instance(result, changeset),
73-
{:ok, result} <- Access.get_cable_by_id(result.id),
74-
do: {:ok, result}
59+
ActionHelper.build_after(changeset, result, :get_cable_by_id)
7560
end)
7661

7762
change load [:href]

lib/access/resources/card.ex

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,13 @@ defmodule DiffoExample.Access.Card do
1010
"""
1111

1212
alias Diffo.Provider.BaseInstance
13-
alias Diffo.Provider.Instance.Specification
1413
alias Diffo.Provider.Instance.Relationship
15-
alias Diffo.Provider.Instance.Feature
1614
alias Diffo.Provider.Instance.Characteristic
17-
alias Diffo.Provider.Instance.Place
18-
alias Diffo.Provider.Instance.Party
1915
alias Diffo.Provider.Assigner
2016
alias Diffo.Provider.Assignment
2117

2218
alias DiffoExample.Access
19+
alias DiffoExample.Access.ActionHelper
2320

2421
use Ash.Resource,
2522
fragments: [BaseInstance],
@@ -56,22 +53,10 @@ defmodule DiffoExample.Access.Card do
5653

5754
change set_attribute(:type, :resource)
5855

59-
change before_action(fn changeset, _context ->
60-
changeset
61-
|> Specification.set_specified_by_argument()
62-
|> Feature.set_features_argument()
63-
|> Characteristic.set_characteristics_argument()
64-
end)
56+
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
6557

6658
change after_action(fn changeset, result, _context ->
67-
with {:ok, result} <- Specification.relate_instance(result, changeset),
68-
{:ok, result} <- Relationship.relate_instance(result, changeset),
69-
{:ok, result} <- Feature.relate_instance(result, changeset),
70-
{:ok, result} <- Characteristic.relate_instance(result, changeset),
71-
{:ok, result} <- Place.relate_instance(result, changeset),
72-
{:ok, result} <- Party.relate_instance(result, changeset),
73-
{:ok, result} <- Access.get_card_by_id(result.id),
74-
do: {:ok, result}
59+
ActionHelper.build_after(changeset, result, :get_card_by_id)
7560
end)
7661

7762
change load [:href]

lib/access/resources/path.ex

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,11 @@ defmodule DiffoExample.Access.Path do
1010
"""
1111

1212
alias Diffo.Provider.BaseInstance
13-
alias Diffo.Provider.Instance.Specification
1413
alias Diffo.Provider.Instance.Relationship
15-
alias Diffo.Provider.Instance.Feature
1614
alias Diffo.Provider.Instance.Characteristic
17-
alias Diffo.Provider.Instance.Place
18-
alias Diffo.Provider.Instance.Party
1915

2016
alias DiffoExample.Access
17+
alias DiffoExample.Access.ActionHelper
2118

2219
use Ash.Resource,
2320
fragments: [BaseInstance],
@@ -53,22 +50,10 @@ defmodule DiffoExample.Access.Path do
5350

5451
change set_attribute(:type, :resource)
5552

56-
change before_action(fn changeset, _context ->
57-
changeset
58-
|> Specification.set_specified_by_argument()
59-
|> Feature.set_features_argument()
60-
|> Characteristic.set_characteristics_argument()
61-
end)
53+
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
6254

6355
change after_action(fn changeset, result, _context ->
64-
with {:ok, result} <- Specification.relate_instance(result, changeset),
65-
{:ok, result} <- Relationship.relate_instance(result, changeset),
66-
{:ok, result} <- Feature.relate_instance(result, changeset),
67-
{:ok, result} <- Characteristic.relate_instance(result, changeset),
68-
{:ok, result} <- Place.relate_instance(result, changeset),
69-
{:ok, result} <- Party.relate_instance(result, changeset),
70-
{:ok, result} <- Access.get_path_by_id(result.id),
71-
do: {:ok, result}
56+
ActionHelper.build_after(changeset, result, :get_path_by_id)
7257
end)
7358

7459
change load [:href]

lib/access/resources/shelf.ex

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,13 @@ defmodule DiffoExample.Access.Shelf do
1010
"""
1111

1212
alias Diffo.Provider.BaseInstance
13-
alias Diffo.Provider.Instance.Specification
1413
alias Diffo.Provider.Instance.Relationship
15-
alias Diffo.Provider.Instance.Feature
1614
alias Diffo.Provider.Instance.Characteristic
17-
alias Diffo.Provider.Instance.Place
18-
alias Diffo.Provider.Instance.Party
1915
alias Diffo.Provider.Assigner
2016
alias Diffo.Provider.Assignment
2117

2218
alias DiffoExample.Access
19+
alias DiffoExample.Access.ActionHelper
2320

2421
use Ash.Resource,
2522
fragments: [BaseInstance],
@@ -56,22 +53,10 @@ defmodule DiffoExample.Access.Shelf do
5653

5754
change set_attribute(:type, :resource)
5855

59-
change before_action(fn changeset, _context ->
60-
changeset
61-
|> Specification.set_specified_by_argument()
62-
|> Feature.set_features_argument()
63-
|> Characteristic.set_characteristics_argument()
64-
end)
56+
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
6557

6658
change after_action(fn changeset, result, _context ->
67-
with {:ok, result} <- Specification.relate_instance(result, changeset),
68-
{:ok, result} <- Relationship.relate_instance(result, changeset),
69-
{:ok, result} <- Feature.relate_instance(result, changeset),
70-
{:ok, result} <- Characteristic.relate_instance(result, changeset),
71-
{:ok, result} <- Place.relate_instance(result, changeset),
72-
{:ok, result} <- Party.relate_instance(result, changeset),
73-
{:ok, result} <- Access.get_shelf_by_id(result.id),
74-
do: {:ok, result}
59+
ActionHelper.build_after(changeset, result, :get_shelf_by_id)
7560
end)
7661

7762
change load [:href]

lib/access/services/dsl_access.ex

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ defmodule DiffoExample.Access.DslAccess do
1010
"""
1111

1212
alias Diffo.Provider.BaseInstance
13-
alias Diffo.Provider.Instance.Specification
14-
alias Diffo.Provider.Instance.Feature
1513
alias Diffo.Provider.Instance.Characteristic
16-
alias Diffo.Provider.Instance.Party
1714
alias Diffo.Provider.Instance.Place
1815
alias DiffoExample.Access
16+
alias DiffoExample.Access.ActionHelper
1917

2018
use Ash.Resource,
2119
fragments: [BaseInstance],
@@ -64,21 +62,10 @@ defmodule DiffoExample.Access.DslAccess do
6462
argument :characteristics, {:array, :uuid}, public?: false
6563
argument :features, {:array, :uuid}, public?: false
6664

67-
change before_action(fn changeset, _context ->
68-
changeset
69-
|> Specification.set_specified_by_argument()
70-
|> Feature.set_features_argument()
71-
|> Characteristic.set_characteristics_argument()
72-
end)
65+
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
7366

7467
change after_action(fn changeset, result, _context ->
75-
with {:ok, result} <- Specification.relate_instance(result, changeset),
76-
{:ok, result} <- Feature.relate_instance(result, changeset),
77-
{:ok, result} <- Characteristic.relate_instance(result, changeset),
78-
{:ok, result} <- Party.relate_instance(result, changeset),
79-
{:ok, result} <- Place.relate_instance(result, changeset),
80-
{:ok, result} <- Access.get_dsl_by_id(result.id),
81-
do: {:ok, result}
68+
ActionHelper.build_after(changeset, result, :get_dsl_by_id)
8269
end)
8370

8471
change load [:href]

0 commit comments

Comments
 (0)