@@ -48,80 +48,63 @@ defmodule MastaniServer.Accounts.Delegate.Customization do
4848 """
4949 # for map_size
5050 # see https://stackoverflow.com/questions/33248816/pattern-match-function-against-empty-map
51+
5152 def set_customization ( % User { } = _user , map ) when map_size ( map ) == 0 do
52- { :error , "AccountCustomization: invalid option or not purchased " }
53+ { :error , "AccountCustomization: invalid option or not member " }
5354 end
5455
55- def set_customization ( % User { } = user , map ) when is_map ( map ) do
56- map = map |> map_atom_value ( :string )
56+ def set_customization ( % User { id: user_id } = user , map ) when is_map ( map ) do
57+ with { :ok , % { achievement: achievement } } <- ORM . find ( User , user_id , preload: :achievement ) do
58+ map = map |> map_atom_value ( :string )
5759
58- valid? =
59- map
60- |> Map . keys ( )
61- |> Enum . all? ( & can_set? ( user , & 1 , :boolean ) )
60+ valid? =
61+ map
62+ |> Map . keys ( )
63+ |> Enum . all? ( & c11n_item_require? ( & 1 , achievement ) )
6264
63- case valid? do
64- true ->
65- attrs = Map . merge ( % { user_id: user . id } , map )
66- Customization |> ORM . upsert_by ( [ user_id: user . id ] , attrs )
65+ case valid? do
66+ true ->
67+ attrs = Map . merge ( % { user_id: user . id } , map )
68+ Customization |> ORM . upsert_by ( [ user_id: user . id ] , attrs )
6769
68- false ->
69- { :error , "AccountCustomization: invalid option or not purchased" }
70+ false ->
71+ { :error , "AccountCustomization: invalid option or not member" }
72+ end
7073 end
7174 end
7275
7376 def set_customization ( % User { } = user , key , value \\ true ) do
74- with { :ok , key } <- can_set? ( user , key ) do
75- attrs = Map . put ( % { user_id: user . id } , key , value )
76- Customization |> ORM . upsert_by ( [ user_id: user . id ] , attrs )
77- end
78- end
79-
80- defp can_set? ( % User { } = user , key , :boolean ) do
81- case can_set? ( % User { } = user , key ) do
82- { :ok , _ } -> true
83- { :error , _ } -> false
84- end
85- end
86-
87- def can_set? ( % User { } = user , key ) do
88- cond do
89- key in valid_custom_items ( :free ) ->
90- { :ok , key }
91-
92- key in valid_custom_items ( :advance ) ->
93- Accounts . has_purchased? ( user , key )
94-
95- true ->
96- { :error , "AccountCustomization: invalid option" }
77+ with { :ok , % { achievement: achievement } } <- ORM . find ( User , user . id , preload: :achievement ) do
78+ case c11n_item_require? ( key , achievement ) do
79+ true ->
80+ attrs = Map . put ( % { user_id: user . id } , key , value )
81+ Customization |> ORM . upsert_by ( [ user_id: user . id ] , attrs )
82+
83+ false ->
84+ { :error , "AccountCustomization: invalid option or not member" }
85+ end
9786 end
9887 end
9988
100- @ doc """
101- # theme -- user can set a default theme
102- # sidebar_layout -- user can arrange subscribed community index
103- """
104- def valid_custom_items ( :free ) do
105- [
106- :sidebar_layout ,
107- :sidebar_communities_index ,
108- :banner_layout ,
109- :contents_layout ,
110- :content_divider ,
111- :mark_viewed ,
112- :display_density
113- ]
89+ defp c11n_item_require? ( :theme , % {
90+ donate_member: donate_member ,
91+ seninor_member: seninor_member ,
92+ sponsor_member: sponsor_member
93+ } ) do
94+ donate_member or seninor_member or sponsor_member
11495 end
11596
116- @ doc """
117- # :brainwash_free -- ads free
118- # ::community_chart -- user can access comunity charts
119- """
120- def valid_custom_items ( :advance ) do
121- # NOTE: :brainwash_free aka. "ads_free"
122- # use brainwash to avoid brower-block-plugins
123- [ :theme , :brainwash_free , :community_chart ]
124- end
97+ defp c11n_item_require? ( :banner_layout , _ ) , do: true
98+ defp c11n_item_require? ( :contents_layout , _ ) , do: true
99+ defp c11n_item_require? ( :content_divider , _ ) , do: true
100+ defp c11n_item_require? ( :mark_viewed , _ ) , do: true
101+ defp c11n_item_require? ( :display_density , _ ) , do: true
102+ defp c11n_item_require? ( :sidebar_layout , _ ) , do: true
103+ defp c11n_item_require? ( :sidebar_communities_index , _ ) , do: true
104+ # defp c11n_item_require?(:brainwash_free, _), do: true
105+ # defp c11n_item_require?(:community_chart, _), do: true
106+
107+ defp c11n_item_require? ( _ , _ ) , do: false
125108
126109 defp filter_nil_value ( map ) do
127110 for { k , v } <- map , ! is_nil ( v ) , into: % { } , do: { k , v }
0 commit comments