Skip to content

Commit 3805750

Browse files
committed
update to diffo 0.3.0: migrate instance resources to structure/behaviour DSL
- update mix.exs to diffo 0.3.0 pre-release (local path) - migrate all 12 instance resources (7 NBN, 4 Access, 1 DSL service) to structure do / behaviour do DSL pattern - remove ActionHelper usage throughout; build lifecycle now wired globally via BuildBefore/BuildAfter registered on BaseInstance - RSP: replace set_attribute(:kind) with set_attribute(:type, :Organization) per BaseParty 0.3.0 API; add instances do block declaring :owner role for all 5 owned NBN resource types - remove spec seeding from Nbn.Initializer — specifications now created lazily in build_before; Specification.upsert_specification/1 removed in 0.3.0 - tests: referred_type replaces referredType in place/party creation helpers - tests: add description field to all JSON encoding assertions — new in 0.3.0, emitted from specification after category - livebook: fix NNI Group define (nni_group + svlans characteristics, not svlan); fix NTD define (ntd + ports as separate characteristics, not a list)
1 parent 8a64c83 commit 3805750

22 files changed

Lines changed: 260 additions & 310 deletions

documentation/domains/diffo_example_nbn.livemd

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,10 @@ Define the NNI Group with an SVLAN assignment and relate the NNI:
171171

172172
```elixir
173173
nni_group = Nbn.define_nni_group!(nni_group, %{
174-
characteristic_value_updates: [nni_group: [svlan: 100]]
174+
characteristic_value_updates: [
175+
nni_group: [name: "SYD-POI-01", location: "Sydney Olympic Park"],
176+
svlans: [first: 1, last: 4000, free: 4000, assignable_type: "svlan"]
177+
]
175178
}, actor: actor)
176179
nni_group = Nbn.relate_nni_group!(nni_group, %{
177180
relationships: [%Diffo.Provider.Instance.Relationship{id: nni.id, alias: :nni, type: :isAssigned}]
@@ -201,7 +204,10 @@ Build an NTD — the device installed at the customer premises:
201204
alias DiffoExample.Nbn.{Ntd, Uni, Avc, NbnEthernet}
202205
ntd = Nbn.build_ntd!(%{})
203206
ntd = Nbn.define_ntd!(ntd, %{
204-
characteristic_value_updates: [ntd: [technology: :FTTP, ports: [1, 2, 3, 4]]]
207+
characteristic_value_updates: [
208+
ntd: [technology: :FTTP],
209+
ports: [first: 1, last: 4, free: 4, assignable_type: "port"]
210+
]
205211
})
206212
ntd |> Jason.encode!(pretty: true) |> IO.puts
207213
```

lib/access/resources/cable.ex

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ defmodule DiffoExample.Access.Cable do
1212
alias Diffo.Provider.BaseInstance
1313
alias Diffo.Provider.Instance.Relationship
1414
alias Diffo.Provider.Instance.Characteristic
15-
alias Diffo.Provider.Instance.ActionHelper
1615
alias Diffo.Provider.Assigner
1716
alias Diffo.Provider.Assignment
1817

@@ -27,38 +26,36 @@ defmodule DiffoExample.Access.Cable do
2726
plural_name :Cables
2827
end
2928

30-
specification do
31-
id "ce0a567a-6abb-4862-9e33-851fd79fa595"
32-
name "cable"
33-
type :resourceSpecification
34-
description "A Cable Resource Instance"
35-
category "Network Resource"
29+
structure do
30+
specification do
31+
id "ce0a567a-6abb-4862-9e33-851fd79fa595"
32+
name "cable"
33+
type :resourceSpecification
34+
description "A Cable Resource Instance"
35+
category "Network Resource"
36+
end
37+
38+
characteristics do
39+
characteristic :cable, DiffoExample.Access.CableValue
40+
characteristic :pairs, Diffo.Provider.AssignableValue
41+
end
3642
end
3743

38-
characteristics do
39-
characteristic :cable, DiffoExample.Access.CableValue
40-
characteristic :pairs, Diffo.Provider.AssignableValue
44+
behaviour do
45+
actions do
46+
create :build
47+
end
4148
end
4249

4350
actions do
4451
create :build do
4552
description "creates a new Cable resource instance for build"
4653
accept [:id, :name, :type, :which]
47-
argument :specified_by, :uuid, public?: false
4854
argument :relationships, {:array, :struct}
49-
argument :features, {:array, :uuid}, public?: false
50-
argument :characteristics, {:array, :uuid}, public?: false
5155
argument :places, {:array, :struct}
5256
argument :parties, {:array, :struct}
5357

5458
change set_attribute(:type, :resource)
55-
56-
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
57-
58-
change after_action(fn changeset, result, _context ->
59-
ActionHelper.build_after(changeset, result, Access, :get_cable_by_id)
60-
end)
61-
6259
change load [:href]
6360
upsert? false
6461
end

lib/access/resources/card.ex

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ defmodule DiffoExample.Access.Card do
1212
alias Diffo.Provider.BaseInstance
1313
alias Diffo.Provider.Instance.Relationship
1414
alias Diffo.Provider.Instance.Characteristic
15-
alias Diffo.Provider.Instance.ActionHelper
1615
alias Diffo.Provider.Assigner
1716
alias Diffo.Provider.Assignment
1817

@@ -27,38 +26,36 @@ defmodule DiffoExample.Access.Card do
2726
plural_name :Cards
2827
end
2928

30-
specification do
31-
id "cd29956f-6c68-44cc-bf54-705eb8d2f754"
32-
name "card"
33-
type :resourceSpecification
34-
description "A Card Resource Instance"
35-
category "Network Resource"
29+
structure do
30+
specification do
31+
id "cd29956f-6c68-44cc-bf54-705eb8d2f754"
32+
name "card"
33+
type :resourceSpecification
34+
description "A Card Resource Instance"
35+
category "Network Resource"
36+
end
37+
38+
characteristics do
39+
characteristic :card, DiffoExample.Access.CardValue
40+
characteristic :ports, Diffo.Provider.AssignableValue
41+
end
3642
end
3743

38-
characteristics do
39-
characteristic :card, DiffoExample.Access.CardValue
40-
characteristic :ports, Diffo.Provider.AssignableValue
44+
behaviour do
45+
actions do
46+
create :build
47+
end
4148
end
4249

4350
actions do
4451
create :build do
4552
description "creates a new Card resource instance for build"
4653
accept [:id, :name, :type, :which]
47-
argument :specified_by, :uuid, public?: false
4854
argument :relationships, {:array, :struct}
49-
argument :features, {:array, :uuid}, public?: false
50-
argument :characteristics, {:array, :uuid}, public?: false
5155
argument :places, {:array, :struct}
5256
argument :parties, {:array, :struct}
5357

5458
change set_attribute(:type, :resource)
55-
56-
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
57-
58-
change after_action(fn changeset, result, _context ->
59-
ActionHelper.build_after(changeset, result, Access, :get_card_by_id)
60-
end)
61-
6259
change load [:href]
6360
upsert? false
6461
end

lib/access/resources/path.ex

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ defmodule DiffoExample.Access.Path do
1212
alias Diffo.Provider.BaseInstance
1313
alias Diffo.Provider.Instance.Relationship
1414
alias Diffo.Provider.Instance.Characteristic
15-
alias Diffo.Provider.Instance.ActionHelper
1615

1716
alias DiffoExample.Access
1817

@@ -25,37 +24,35 @@ defmodule DiffoExample.Access.Path do
2524
plural_name :Paths
2625
end
2726

28-
specification do
29-
id "1d507914-8f76-48cb-aa0e-3a8f92951ab0"
30-
name "path"
31-
type :resourceSpecification
32-
description "A Path Resource Instance"
33-
category "Network Resource"
27+
structure do
28+
specification do
29+
id "1d507914-8f76-48cb-aa0e-3a8f92951ab0"
30+
name "path"
31+
type :resourceSpecification
32+
description "A Path Resource Instance"
33+
category "Network Resource"
34+
end
35+
36+
characteristics do
37+
characteristic :path, DiffoExample.Access.PathValue
38+
end
3439
end
3540

36-
characteristics do
37-
characteristic :path, DiffoExample.Access.PathValue
41+
behaviour do
42+
actions do
43+
create :build
44+
end
3845
end
3946

4047
actions do
4148
create :build do
4249
description "creates a new Path resource instance for build"
4350
accept [:id, :name, :type, :which]
44-
argument :specified_by, :uuid, public?: false
4551
argument :relationships, {:array, :struct}
46-
argument :features, {:array, :uuid}, public?: false
47-
argument :characteristics, {:array, :uuid}, public?: false
4852
argument :places, {:array, :struct}
4953
argument :parties, {:array, :struct}
5054

5155
change set_attribute(:type, :resource)
52-
53-
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
54-
55-
change after_action(fn changeset, result, _context ->
56-
ActionHelper.build_after(changeset, result, Access, :get_path_by_id)
57-
end)
58-
5956
change load [:href]
6057
upsert? false
6158
end

lib/access/resources/shelf.ex

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ defmodule DiffoExample.Access.Shelf do
1212
alias Diffo.Provider.BaseInstance
1313
alias Diffo.Provider.Instance.Relationship
1414
alias Diffo.Provider.Instance.Characteristic
15-
alias Diffo.Provider.Instance.ActionHelper
1615
alias Diffo.Provider.Assigner
1716
alias Diffo.Provider.Assignment
1817

@@ -27,38 +26,36 @@ defmodule DiffoExample.Access.Shelf do
2726
plural_name :Shelves
2827
end
2928

30-
specification do
31-
id "ef016d85-9dbd-429c-84da-1df56cc7dda5"
32-
name "shelf"
33-
type :resourceSpecification
34-
description "A Shelf Resource Instance which contain cards"
35-
category "Network Resource"
29+
structure do
30+
specification do
31+
id "ef016d85-9dbd-429c-84da-1df56cc7dda5"
32+
name "shelf"
33+
type :resourceSpecification
34+
description "A Shelf Resource Instance which contain cards"
35+
category "Network Resource"
36+
end
37+
38+
characteristics do
39+
characteristic :shelf, DiffoExample.Access.ShelfValue
40+
characteristic :slots, Diffo.Provider.AssignableValue
41+
end
3642
end
3743

38-
characteristics do
39-
characteristic :shelf, DiffoExample.Access.ShelfValue
40-
characteristic :slots, Diffo.Provider.AssignableValue
44+
behaviour do
45+
actions do
46+
create :build
47+
end
4148
end
4249

4350
actions do
4451
create :build do
4552
description "creates a new Shelf resource instance for build"
4653
accept [:id, :name, :type, :which]
47-
argument :specified_by, :uuid, public?: false
4854
argument :relationships, {:array, :struct}
49-
argument :features, {:array, :uuid}, public?: false
50-
argument :characteristics, {:array, :uuid}, public?: false
5155
argument :places, {:array, :struct}
5256
argument :parties, {:array, :struct}
5357

5458
change set_attribute(:type, :resource)
55-
56-
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
57-
58-
change after_action(fn changeset, result, _context ->
59-
ActionHelper.build_after(changeset, result, Access, :get_shelf_by_id)
60-
end)
61-
6259
change load [:href]
6360
upsert? false
6461
end

lib/access/services/dsl_access.ex

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ defmodule DiffoExample.Access.DslAccess do
1212
alias Diffo.Provider.BaseInstance
1313
alias Diffo.Provider.Instance.Characteristic
1414
alias Diffo.Provider.Instance.Place
15-
alias Diffo.Provider.Instance.ActionHelper
1615

1716
alias DiffoExample.Access
1817

@@ -25,25 +24,33 @@ defmodule DiffoExample.Access.DslAccess do
2524
plural_name :DslAccesses
2625
end
2726

28-
specification do
29-
id "da9b207a-26c3-451d-8abd-0640c6349979"
30-
name "dslAccess"
31-
description "A DSL Access Network Service connecting a subscriber premises to an NNI"
32-
category "Network Service"
33-
end
27+
structure do
28+
specification do
29+
id "da9b207a-26c3-451d-8abd-0640c6349979"
30+
name "dslAccess"
31+
description "A DSL Access Network Service connecting a subscriber premises to an NNI"
32+
category "Network Service"
33+
end
3434

35-
features do
36-
feature :dynamic_line_management do
37-
is_enabled? true
38-
characteristic :constraints, DiffoExample.Access.Constraints
35+
features do
36+
feature :dynamic_line_management do
37+
is_enabled? true
38+
characteristic :constraints, DiffoExample.Access.Constraints
39+
end
40+
end
41+
42+
characteristics do
43+
characteristic :dslam, DiffoExample.Access.Dslam
44+
characteristic :aggregate_interface, DiffoExample.Access.AggregateInterface
45+
characteristic :circuit, DiffoExample.Access.Circuit
46+
characteristic :line, DiffoExample.Access.Line
3947
end
4048
end
4149

42-
characteristics do
43-
characteristic :dslam, DiffoExample.Access.Dslam
44-
characteristic :aggregate_interface, DiffoExample.Access.AggregateInterface
45-
characteristic :circuit, DiffoExample.Access.Circuit
46-
characteristic :line, DiffoExample.Access.Line
50+
behaviour do
51+
actions do
52+
create :qualify
53+
end
4754
end
4855

4956
state_machine do
@@ -59,15 +66,6 @@ defmodule DiffoExample.Access.DslAccess do
5966
accept [:id, :name, :type, :which]
6067
argument :places, {:array, :struct}
6168
argument :parties, {:array, :struct}
62-
argument :specified_by, :uuid, public?: false
63-
argument :characteristics, {:array, :uuid}, public?: false
64-
argument :features, {:array, :uuid}, public?: false
65-
66-
change before_action(fn changeset, _context -> ActionHelper.build_before(changeset) end)
67-
68-
change after_action(fn changeset, result, _context ->
69-
ActionHelper.build_after(changeset, result, Access, :get_dsl_by_id)
70-
end)
7169

7270
change load [:href]
7371
upsert? false

lib/nbn/initializer.ex

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@ defmodule DiffoExample.Nbn.Initializer do
77
Diffo - TMF Service and Resource Management with a difference
88
99
Initializes the NBN domain on application startup:
10-
- upserts all resource specifications into the catalog
1110
- seeds RSP records in historical EPID sequence
1211
"""
1312

14-
alias Diffo.Provider.Instance.Specification
1513
alias DiffoExample.Nbn
1614

1715
@rsps [
@@ -25,16 +23,6 @@ defmodule DiffoExample.Nbn.Initializer do
2523
]
2624

2725
def init do
28-
Nbn
29-
|> Ash.Domain.Info.resources()
30-
|> Enum.each(fn module ->
31-
try do
32-
Specification.upsert_specification(module)
33-
rescue
34-
_ -> :ok
35-
end
36-
end)
37-
3826
seed_rsps()
3927
end
4028

0 commit comments

Comments
 (0)