Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commit dbd5ab3

Browse files
committed
refactor(c11n): replace with new c11n stradgy
1 parent eeaa3b6 commit dbd5ab3

File tree

6 files changed

+55
-156
lines changed

6 files changed

+55
-156
lines changed

lib/mastani_server/accounts/accounts.ex

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ defmodule MastaniServer.Accounts do
33

44
alias MastaniServer.Accounts.Delegate.{
55
Achievements,
6-
Billing,
76
Customization,
87
Fans,
98
FavoriteCategory,
@@ -61,11 +60,6 @@ defmodule MastaniServer.Accounts do
6160
defdelegate mark_mail_read_all(user, opt), to: Mails
6261
defdelegate mark_mail_read(mail, user), to: Mails
6362

64-
# purchase
65-
defdelegate purchase_service(user, key, value), to: Billing
66-
defdelegate purchase_service(user, key), to: Billing
67-
defdelegate has_purchased?(user, key), to: Billing
68-
6963
# customization
7064
defdelegate get_customization(user), to: Customization
7165
defdelegate set_customization(user, key, value), to: Customization

lib/mastani_server/accounts/delegates/billing.ex

Lines changed: 0 additions & 67 deletions
This file was deleted.

lib/mastani_server/accounts/delegates/customization.ex

Lines changed: 42 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -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}

test/mastani_server/accounts/customization_test.exs

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,23 @@ defmodule MastaniServer.Test.Accounts.Customization do
1212
end
1313

1414
describe "[user customization]" do
15+
@tag :wip
1516
test "user can have default customization without payment", ~m(user)a do
1617
{:ok, result} = Accounts.set_customization(user, :banner_layout, "digest")
1718
assert result.banner_layout == "digest"
18-
19-
{:error, _result} = Accounts.set_customization(user, :non_exsit, true)
2019
end
2120

22-
test "user set advance customization without payment fails", ~m(user)a do
23-
{:error, _result} = Accounts.set_customization(user, :non_exsit, true)
24-
{:error, _result} = Accounts.set_customization(user, :brainwash_free, true)
21+
@tag :wip
22+
test "user set non exsit customization fails", ~m(user)a do
23+
{:error, _} = Accounts.set_customization(user, :non_exsit, true)
2524
end
2625

27-
test "user can set advance customization after pay for it", ~m(user)a do
28-
{:error, _result} = Accounts.set_customization(user, :brainwash_free, true)
29-
{:ok, _result} = Accounts.purchase_service(user, :brainwash_free)
30-
31-
{:ok, _result} = Accounts.set_customization(user, :brainwash_free, true)
26+
@tag :wip2
27+
test "user set advance customization without payment fails", ~m(user)a do
28+
{:error, _} = Accounts.set_customization(user, :theme, "blue")
3229
end
3330

31+
@tag :wip2
3432
test "user can set multiable customization at once", ~m(user)a do
3533
{:ok, result} =
3634
Accounts.set_customization(user, %{
@@ -48,18 +46,5 @@ defmodule MastaniServer.Test.Accounts.Customization do
4846

4947
assert {:error, _result} = Accounts.set_customization(user, %{})
5048
end
51-
52-
test "user can purchase multiable items at once", ~m(user)a do
53-
{:ok, result} =
54-
Accounts.purchase_service(user, %{brainwash_free: true, community_chart: true})
55-
56-
assert result.brainwash_free == true
57-
assert result.community_chart == true
58-
59-
assert {:error, _result} =
60-
Accounts.purchase_service(user, %{brainwash_free: true, no_exsit: true})
61-
62-
assert {:error, _result} = Accounts.purchase_service(user, %{})
63-
end
6449
end
6550
end

test/mastani_server/billing/billing_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ defmodule MastaniServer.Test.Billing do
9696
assert achievement.seninor_member == true
9797
end
9898

99-
@tag :wip2
99+
@tag :wip
100100
test "sponsor updgrade to seninor_member after bill handled", ~m(user valid_attrs)a do
101101
attrs = valid_attrs |> Map.merge(%{amount: 0, payment_usage: "sponsor"})
102102

test/mastani_server_web/mutation/billing/billing_test.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
defmodule MastaniServer.Test.Mutation.Billing.Basic do
22
use MastaniServer.TestTools
33

4+
import Helper.Utils
5+
46
alias MastaniServer.Billing
57

8+
@seninor_amount_threshold get_config(:general, :seninor_amount_threshold)
9+
610
setup do
711
{:ok, user} = db_insert(:user)
812

0 commit comments

Comments
 (0)