@@ -30,6 +30,9 @@ defmodule Diffo.Provider.Instance.Feature do
3030 [ ] ->
3131 changeset
3232
33+ { :error , error } ->
34+ Ash.Changeset . add_error ( changeset , error )
35+
3336 _ ->
3437 feature_ids = Enum . map ( features , & Map . get ( & 1 , :id ) )
3538 Ash.Changeset . force_set_argument ( changeset , :features , feature_ids )
@@ -49,28 +52,41 @@ defmodule Diffo.Provider.Instance.Feature do
4952 fn % { name: name , is_enabled?: isEnabled , characteristics: characteristics } , acc ->
5053 characteristic_ids =
5154 Enum . reduce_while ( characteristics , [ ] , fn % { name: name , value_type: value_type } , acc ->
52- value = struct ( value_type )
55+ try do
56+ value = struct ( value_type )
57+
58+ case Provider . create_characteristic ( % { name: name , value: value , type: :feature } ) do
59+ { :ok , result } ->
60+ { :cont , [ result . id | acc ] }
61+
62+ { :error , error } ->
63+ { :halt , { :error , error } }
64+ end
65+ rescue
66+ _e in UndefinedFunctionError ->
67+ { :halt ,
68+ { :error ,
69+ "couldn't create feature characteristic with value of unknown type #{ value_type } " } }
70+ end
71+ end )
5372
54- case Provider . create_characteristic ( % { name: name , value: value , type: :feature } ) do
73+ case characteristic_ids do
74+ { :error , error } ->
75+ { :halt , { :error , error } }
76+
77+ _ ->
78+ # create feature with feature characteristics
79+ case Provider . create_feature ( % {
80+ name: name ,
81+ isEnabled: isEnabled ,
82+ characteristics: characteristic_ids
83+ } ) do
5584 { :ok , result } ->
56- { :cont , [ result . id | acc ] }
85+ { :cont , [ result | acc ] }
5786
58- { :error , _error } ->
59- { :halt , [ ] }
87+ { :error , error } ->
88+ { :halt , { :error , error } }
6089 end
61- end )
62-
63- # create feature with feature characteristics
64- case Provider . create_feature ( % {
65- name: name ,
66- isEnabled: isEnabled ,
67- characteristics: characteristic_ids
68- } ) do
69- { :ok , result } ->
70- { :cont , [ result | acc ] }
71-
72- { :error , _error } ->
73- { :halt , [ ] }
7490 end
7591 end
7692 )
0 commit comments