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

Commit b4ca243

Browse files
committed
Merge branch 'fix/update-favorites-category' into dev
2 parents 6ff15ad + 118f08b commit b4ca243

File tree

8 files changed

+68
-59
lines changed

8 files changed

+68
-59
lines changed

lib/mastani_server/accounts/accounts.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ defmodule MastaniServer.Accounts do
2323
defdelegate create_favorite_category(user, attrs), to: FavoriteCategory
2424
defdelegate update_favorite_category(user, attrs), to: FavoriteCategory
2525
defdelegate delete_favorite_category(user, id), to: FavoriteCategory
26-
defdelegate set_favorites(user, thread, content_id, category_title), to: FavoriteCategory
27-
defdelegate unset_favorites(user, thread, content_id, category_title), to: FavoriteCategory
26+
defdelegate set_favorites(user, thread, content_id, category_id), to: FavoriteCategory
27+
defdelegate unset_favorites(user, thread, content_id, category_id), to: FavoriteCategory
2828

2929
# achievement
3030
defdelegate achieve(user, operation, key), to: Achievements

lib/mastani_server/accounts/delegates/favorite_category.ex

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ defmodule MastaniServer.Accounts.Delegate.FavoriteCategory do
4141
from(
4242
pf in CMS.PostFavorite,
4343
where: pf.user_id == ^user_id,
44-
where: pf.category_title == ^category.title
44+
where: pf.category_id == ^category.id
4545
)
4646

4747
query |> Repo.delete_all() |> done()
@@ -89,8 +89,8 @@ defmodule MastaniServer.Accounts.Delegate.FavoriteCategory do
8989

9090
alias CMS.PostFavorite
9191

92-
defp check_dup_category(content, category_title) do
93-
case content.category_title !== category_title do
92+
defp check_dup_category(content, category) do
93+
case content.category_id !== category.id do
9494
true -> {:ok, ""}
9595
false -> {:error, [message: "viewer has already categoried", code: ecode(:already_did)]}
9696
end
@@ -100,20 +100,20 @@ defmodule MastaniServer.Accounts.Delegate.FavoriteCategory do
100100
PostFavorite |> ORM.find_by(%{post_id: content_id, user_id: user_id})
101101
end
102102

103-
def set_favorites(%User{} = user, thread, content_id, title) do
103+
def set_favorites(%User{} = user, thread, content_id, category_id) do
104104
with {:ok, favorite_category} <-
105-
FavoriteCategory |> ORM.find_by(%{user_id: user.id, title: title}) do
105+
FavoriteCategory |> ORM.find_by(%{user_id: user.id, id: category_id}) do
106106
Multi.new()
107107
|> Multi.run(:favorite_content, fn _ ->
108108
case content_favorite_result(thread, content_id, user.id) do
109-
{:ok, content_favorite} -> check_dup_category(content_favorite, title)
109+
{:ok, content_favorite} -> check_dup_category(content_favorite, favorite_category)
110110
{:error, _} -> CMS.reaction(thread, :favorite, content_id, user)
111111
end
112112
end)
113-
|> Multi.run(:update_title, fn _ ->
113+
|> Multi.run(:update_category_id, fn _ ->
114114
{:ok, content_favorite} = content_favorite_result(thread, content_id, user.id)
115115

116-
content_favorite |> ORM.update(%{category_title: title})
116+
content_favorite |> ORM.update(%{category_id: favorite_category.id})
117117
end)
118118
|> Multi.run(:inc_count, fn _ ->
119119
favorite_category |> ORM.update(%{total_count: favorite_category.total_count + 1})
@@ -130,17 +130,17 @@ defmodule MastaniServer.Accounts.Delegate.FavoriteCategory do
130130
{:error, result}
131131
end
132132

133-
defp set_favorites_result({:error, :update_title, _result, _steps}) do
134-
{:error, [message: "update category title fails", code: ecode(:update_fails)]}
133+
defp set_favorites_result({:error, :update_category_id, _result, _steps}) do
134+
{:error, [message: "update category content fails", code: ecode(:update_fails)]}
135135
end
136136

137137
defp set_favorites_result({:error, :update_count, _result, _steps}) do
138138
{:error, [message: "inc total count fails", code: ecode(:update_fails)]}
139139
end
140140

141-
def unset_favorites(%User{} = user, thread, content_id, title) do
141+
def unset_favorites(%User{} = user, thread, content_id, category_id) do
142142
with {:ok, favorite_category} <-
143-
FavoriteCategory |> ORM.find_by(%{user_id: user.id, title: title}) do
143+
FavoriteCategory |> ORM.find_by(%{user_id: user.id, id: category_id}) do
144144
Multi.new()
145145
|> Multi.run(:remove_favorite_record, fn _ ->
146146
{:ok, content_favorite} = content_favorite_result(thread, content_id, user.id)

lib/mastani_server/cms/post_favorite.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ defmodule MastaniServer.CMS.PostFavorite do
88
alias MastaniServer.CMS.Post
99

1010
@required_fields ~w(user_id post_id)a
11-
@optional_fields ~w(category_title)a
11+
@optional_fields ~w(category_title category_id)a
1212

1313
@type t :: %PostFavorite{}
1414
schema "posts_favorites" do
1515
belongs_to(:user, Accounts.User, foreign_key: :user_id)
1616
belongs_to(:post, Post, foreign_key: :post_id)
1717
# has_many(:category, UserFavoriteCategory)
18-
# belongs_to(:category, FavoriteCategory)
18+
belongs_to(:category, Accounts.FavoriteCategory)
1919
field(:category_title, :string, default: "all")
2020

2121
timestamps(type: :utc_datetime)

lib/mastani_server_web/resolvers/accounts_resolver.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ defmodule MastaniServerWeb.Resolvers.Accounts do
4949
Accounts.delete_favorite_category(cur_user, id)
5050
end
5151

52-
def set_favorites(_root, ~m(id thread category_title)a, %{context: %{cur_user: cur_user}}) do
53-
Accounts.set_favorites(cur_user, thread, id, category_title)
52+
def set_favorites(_root, ~m(id thread category_id)a, %{context: %{cur_user: cur_user}}) do
53+
Accounts.set_favorites(cur_user, thread, id, category_id)
5454
end
5555

56-
def unset_favorites(_root, ~m(id thread category_title)a, %{context: %{cur_user: cur_user}}) do
57-
Accounts.unset_favorites(cur_user, thread, id, category_title)
56+
def unset_favorites(_root, ~m(id thread category_id)a, %{context: %{cur_user: cur_user}}) do
57+
Accounts.unset_favorites(cur_user, thread, id, category_id)
5858
end
5959

6060
def follow(_root, ~m(user_id)a, %{context: %{cur_user: cur_user}}) do

lib/mastani_server_web/schema/account/account_mutations.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ defmodule MastaniServerWeb.Schema.Account.Mutations do
7979
@desc "put content to favorites with category"
8080
field :set_favorites, :favorites_category do
8181
arg(:id, non_null(:id))
82-
arg(:category_title, non_null(:string))
82+
arg(:category_id, non_null(:id))
8383
arg(:thread, :cms_thread, default_value: :post)
8484

8585
middleware(M.Authorize, :login)
@@ -89,7 +89,7 @@ defmodule MastaniServerWeb.Schema.Account.Mutations do
8989
@desc "take out content from favorites category"
9090
field :unset_favorites, :favorites_category do
9191
arg(:id, non_null(:id))
92-
arg(:category_title, non_null(:string))
92+
arg(:category_id, non_null(:id))
9393
arg(:thread, :cms_thread, default_value: :post)
9494

9595
middleware(M.Authorize, :login)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
defmodule MastaniServer.Repo.Migrations.ReplaceCategoryIdToPostsFavorites do
2+
use Ecto.Migration
3+
4+
def change do
5+
alter table(:posts_favorites) do
6+
add(:category_id, references(:favorite_categories, on_delete: :delete_all))
7+
end
8+
end
9+
end

test/mastani_server/accounts/favorite_category_test.exs

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ defmodule MastaniServer.Test.Accounts.FavoriteCategory do
6060
test_category = "test category"
6161
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category})
6262

63-
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post.id, category.title)
64-
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post2.id, category.title)
63+
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post.id, category.id)
64+
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post2.id, category.id)
6565

6666
assert {:ok, _} = Accounts.delete_favorite_category(user, category.id)
6767

@@ -74,66 +74,66 @@ defmodule MastaniServer.Test.Accounts.FavoriteCategory do
7474
end
7575

7676
describe "[favorite category set/unset]" do
77+
@tag :wip
7778
test "user can set category to a favorited post", ~m(user post)a do
7879
test_category = "test category"
79-
{:ok, _category} = Accounts.create_favorite_category(user, %{title: test_category})
80-
81-
{:ok, _favorites_category} = Accounts.set_favorites(user, :post, post.id, test_category)
80+
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category})
81+
{:ok, _favorites_category} = Accounts.set_favorites(user, :post, post.id, category.id)
8282

8383
{:ok, post_favorite} =
8484
CMS.PostFavorite |> ORM.find_by(%{post_id: post.id, user_id: user.id})
8585

86-
assert post_favorite.category_title == test_category
86+
assert post_favorite.category_id == category.id
8787
end
8888

89+
@tag :wip
8990
test "user can change category to a categoried favorited post", ~m(user post)a do
9091
test_category = "test category"
91-
{:ok, _category} = Accounts.create_favorite_category(user, %{title: test_category})
92+
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category})
9293

9394
{:ok, _} = CMS.reaction(:post, :favorite, post.id, user)
94-
{:ok, _favorite_category} = Accounts.set_favorites(user, :post, post.id, test_category)
95+
{:ok, _favorite_category} = Accounts.set_favorites(user, :post, post.id, category.id)
9596

9697
{:ok, post_favorite} =
9798
CMS.PostFavorite |> ORM.find_by(%{post_id: post.id, user_id: user.id})
9899

99-
assert post_favorite.category_title == test_category
100+
assert post_favorite.category_id == category.id
100101

101102
test_category2 = "test category2"
102-
{:ok, _category} = Accounts.create_favorite_category(user, %{title: test_category2})
103-
{:ok, _favorite_category} = Accounts.set_favorites(user, :post, post.id, test_category2)
103+
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category2})
104+
{:ok, _favorite_category} = Accounts.set_favorites(user, :post, post.id, category.id)
104105

105106
{:ok, post_favorite} =
106107
CMS.PostFavorite |> ORM.find_by(%{post_id: post.id, user_id: user.id})
107108

108-
assert post_favorite.category_title == test_category2
109+
assert post_favorite.category_id == category.id
109110
end
110111

111112
test "user set a un-created user's category fails", ~m(user post)a do
113+
{:ok, user2} = db_insert(:user)
112114
test_category = "test category"
115+
{:ok, category} = Accounts.create_favorite_category(user2, %{title: test_category})
113116

114-
assert {:error, _} = Accounts.set_favorites(user, :post, post.id, test_category)
117+
assert {:error, _} = Accounts.set_favorites(user, :post, post.id, category.id)
115118
end
116119

120+
@tag :wip
117121
test "user set to a already categoried post fails", ~m(user post)a do
118122
test_category = "test category"
119-
{:ok, _category} = Accounts.create_favorite_category(user, %{title: test_category})
120-
{:ok, _} = Accounts.set_favorites(user, :post, post.id, test_category)
123+
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category})
124+
{:ok, _} = Accounts.set_favorites(user, :post, post.id, category.id)
121125

122-
{:error, error} = Accounts.set_favorites(user, :post, post.id, test_category)
126+
{:error, error} = Accounts.set_favorites(user, :post, post.id, category.id)
123127
assert error |> Keyword.get(:code) == ecode(:already_did)
124128
end
125129

126-
test "user can set category to a unfavorited post fails", ~m(user post)a do
127-
{:error, _} = Accounts.set_favorites(user, :post, post.id, "test category")
128-
end
129-
130130
test "user can unset category to a favorited post", ~m(user post)a do
131131
test_category = "test category"
132-
{:ok, _category} = Accounts.create_favorite_category(user, %{title: test_category})
133-
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post.id, test_category)
132+
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category})
133+
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post.id, category.id)
134134
assert {:ok, _} = CMS.PostFavorite |> ORM.find_by(%{post_id: post.id, user_id: user.id})
135135

136-
{:ok, _category} = Accounts.unset_favorites(user, :post, post.id, test_category)
136+
{:ok, _category} = Accounts.unset_favorites(user, :post, post.id, category.id)
137137

138138
assert {:error, _} = CMS.PostFavorite |> ORM.find_by(%{post_id: post.id, user_id: user.id})
139139
end
@@ -145,23 +145,23 @@ defmodule MastaniServer.Test.Accounts.FavoriteCategory do
145145
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category})
146146
assert category.total_count == 0
147147

148-
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post.id, test_category)
148+
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post.id, category.id)
149149

150150
{:ok, category} = FavoriteCategory |> ORM.find(category.id)
151151
assert category.total_count == 1
152152

153-
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post2.id, test_category)
153+
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post2.id, category.id)
154154
{:ok, category} = FavoriteCategory |> ORM.find(category.id)
155155

156156
assert category.total_count == 2
157157
end
158158

159159
test "total_count - 1 after unset category to a favorited post", ~m(user post)a do
160160
test_category = "test category"
161-
{:ok, _category} = Accounts.create_favorite_category(user, %{title: test_category})
162-
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post.id, test_category)
161+
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category})
162+
{:ok, _post_favorite} = Accounts.set_favorites(user, :post, post.id, category.id)
163163

164-
{:ok, category} = Accounts.unset_favorites(user, :post, post.id, test_category)
164+
{:ok, category} = Accounts.unset_favorites(user, :post, post.id, category.id)
165165

166166
assert category.total_count == 0
167167
end

test/mastani_server_web/mutation/accounts/favorite_category_test.exs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ defmodule MastaniServer.Test.Mutation.Accounts.FavoriteCategory do
9090

9191
describe "[Accounts FavoriteCategory set/unset]" do
9292
@query """
93-
mutation($id: ID!, $thread: CmsThread, $categoryTitle: String!) {
94-
setFavorites(id: $id, thread: $thread, categoryTitle: $categoryTitle){
93+
mutation($id: ID!, $thread: CmsThread, $categoryId: ID!) {
94+
setFavorites(id: $id, thread: $thread, categoryId: $categoryId){
9595
id
9696
title
9797
totalCount
@@ -100,21 +100,21 @@ defmodule MastaniServer.Test.Mutation.Accounts.FavoriteCategory do
100100
"""
101101
test "user can put a post to favorites category", ~m(user user_conn post)a do
102102
test_category = "test category"
103-
{:ok, _category} = Accounts.create_favorite_category(user, %{title: test_category})
103+
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category})
104104

105-
variables = %{id: post.id, categoryTitle: test_category}
105+
variables = %{id: post.id, categoryId: category.id}
106106
created = user_conn |> mutation_result(@query, variables, "setFavorites")
107107
{:ok, found} = CMS.PostFavorite |> ORM.find_by(%{post_id: post.id, user_id: user.id})
108108

109109
assert created["totalCount"] == 1
110-
assert found.category_title == test_category
110+
assert found.category_id == category.id
111111
assert found.user_id == user.id
112112
assert found.post_id == post.id
113113
end
114114

115115
@query """
116-
mutation($id: ID!, $thread: CmsThread, $categoryTitle: String!) {
117-
unsetFavorites(id: $id, thread: $thread, categoryTitle: $categoryTitle){
116+
mutation($id: ID!, $thread: CmsThread, $categoryId: ID!) {
117+
unsetFavorites(id: $id, thread: $thread, categoryId: $categoryId){
118118
id
119119
title
120120
totalCount
@@ -124,12 +124,12 @@ defmodule MastaniServer.Test.Mutation.Accounts.FavoriteCategory do
124124
test "user can unset favorites category", ~m(user user_conn post)a do
125125
test_category = "test category"
126126
{:ok, category} = Accounts.create_favorite_category(user, %{title: test_category})
127-
{:ok, _favorite_category} = Accounts.set_favorites(user, :post, post.id, test_category)
127+
{:ok, _favorite_category} = Accounts.set_favorites(user, :post, post.id, category.id)
128128

129129
{:ok, category} = Accounts.FavoriteCategory |> ORM.find(category.id)
130130
assert category.total_count == 1
131131

132-
variables = %{id: post.id, categoryTitle: test_category}
132+
variables = %{id: post.id, categoryId: category.id}
133133
user_conn |> mutation_result(@query, variables, "unsetFavorites")
134134

135135
{:ok, category} = Accounts.FavoriteCategory |> ORM.find(category.id)

0 commit comments

Comments
 (0)