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

Commit 592fd2a

Browse files
committed
fix(c11n): overwrite other settings when set single c11n key
1 parent 6d18c5a commit 592fd2a

File tree

5 files changed

+49
-7
lines changed

5 files changed

+49
-7
lines changed

lib/mastani_server/accounts/customization.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ defmodule MastaniServer.Accounts.Customization do
1414
schema "customizations" do
1515
belongs_to(:user, User)
1616

17-
field(:theme, :boolean)
17+
field(:theme, :string)
1818
field(:sidebar_layout, :map)
1919
field(:sidebar_communities_index, :map)
2020

lib/mastani_server/accounts/delegates/customization.ex

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ defmodule MastaniServer.Accounts.Delegate.Customization do
44
"""
55
import Ecto.Query, warn: false
66
import Helper.Utils, only: [get_config: 2, map_atom_value: 2]
7+
import ShortMaps
78

89
alias Helper.ORM
910
alias MastaniServer.Accounts
@@ -54,7 +55,9 @@ defmodule MastaniServer.Accounts.Delegate.Customization do
5455
end
5556

5657
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+
with {:ok, ~m(achievement customization)a} <-
59+
ORM.find(User, user_id, preload: [:achievement, :customization]) do
60+
cur_c11n = extract_cur_c11n(customization)
5861
map = map |> map_atom_value(:string)
5962

6063
valid? =
@@ -64,6 +67,7 @@ defmodule MastaniServer.Accounts.Delegate.Customization do
6467

6568
case valid? do
6669
true ->
70+
map = Map.merge(cur_c11n, map)
6771
attrs = Map.merge(%{user_id: user.id}, map)
6872
Customization |> ORM.upsert_by([user_id: user.id], attrs)
6973

@@ -86,6 +90,14 @@ defmodule MastaniServer.Accounts.Delegate.Customization do
8690
end
8791
end
8892

93+
defp extract_cur_c11n(nil), do: @default_customization
94+
95+
defp extract_cur_c11n(%Customization{} = customization) do
96+
customization = customization |> Map.from_struct() |> filter_nil_value
97+
98+
Map.merge(@default_customization, customization)
99+
end
100+
89101
defp c11n_item_require?(:theme, %{
90102
donate_member: donate_member,
91103
senior_member: senior_member,

lib/mastani_server_web/schema/account/account_misc.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,11 @@ defmodule MastaniServerWeb.Schema.Account.Misc do
6767
field(:community_chart, :boolean)
6868
field(:brainwash_free, :boolean)
6969

70-
field(:banner_layout, :cus_banner_layout_num, default_value: :digest)
71-
field(:contents_layout, :cus_contents_layout_num, default_value: :digest)
70+
field(:banner_layout, :cus_banner_layout_num)
71+
field(:contents_layout, :cus_contents_layout_num)
7272
field(:content_divider, :boolean)
7373
field(:mark_viewed, :boolean)
74-
field(:display_density, :string, default_value: "20")
75-
# field(:sidebar_communities_index, list_of(:community_index))
74+
field(:display_density, :string)
7675
end
7776

7877
input_object :community_index do
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
defmodule MastaniServer.Repo.Migrations.AlterC11nTheme do
2+
use Ecto.Migration
3+
4+
def change do
5+
alter table(:customizations) do
6+
remove(:theme)
7+
add(:theme, :string)
8+
end
9+
end
10+
end

test/mastani_server_web/mutation/accounts/customization_test.exs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ defmodule MastaniServer.Test.Mutation.Account.Customization do
2020
$customization: CustomizationInput!,
2121
$sidebarCommunitiesIndex: [CommunityIndex]
2222
) {
23-
setCustomization(
23+
setCustomization(
2424
userId: $userId,
2525
customization: $customization,
2626
sidebarCommunitiesIndex: $sidebarCommunitiesIndex
@@ -55,6 +55,27 @@ defmodule MastaniServer.Test.Mutation.Account.Customization do
5555
assert result["customization"]["displayDensity"] == "25"
5656
end
5757

58+
test "set single customization should merge not overwright other settings", ~m(user_conn)a do
59+
variables = %{
60+
customization: %{
61+
bannerLayout: "BRIEF"
62+
}
63+
}
64+
65+
result = user_conn |> mutation_result(@query, variables, "setCustomization")
66+
assert result["customization"]["bannerLayout"] == "brief"
67+
68+
variables = %{
69+
customization: %{
70+
displayDensity: "25"
71+
}
72+
}
73+
74+
result = user_conn |> mutation_result(@query, variables, "setCustomization")
75+
assert result["customization"]["bannerLayout"] == "brief"
76+
assert result["customization"]["displayDensity"] == "25"
77+
end
78+
5879
test "user set customization with invalid attr fails", ~m(user_conn)a do
5980
variables1 = %{
6081
customization: %{

0 commit comments

Comments
 (0)