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

Commit cbc2cab

Browse files
authored
refactor(account): published artiments (#411)
* refactor(renaming): publishd_article_comments -> published_comments * refactor(cms): reuse paged_articles logic * refactor(account): move published logic to CMS
1 parent 1d08118 commit cbc2cab

File tree

16 files changed

+93
-89
lines changed

16 files changed

+93
-89
lines changed

lib/groupher_server/accounts/accounts.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ defmodule GroupherServer.Accounts do
4747

4848
# publish
4949
defdelegate paged_published_articles(user, thread, filter), to: Publish
50-
defdelegate paged_published_article_comments(user, thread, filter), to: Publish
51-
defdelegate paged_published_article_comments(user, thread), to: Publish
50+
defdelegate paged_published_comments(user, thread, filter), to: Publish
51+
defdelegate paged_published_comments(user, thread), to: Publish
5252
defdelegate update_published_states(user, thread), to: Publish
5353

5454
# fans

lib/groupher_server/accounts/delegates/publish.ex

Lines changed: 14 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,20 @@ defmodule GroupherServer.Accounts.Delegate.Publish do
33
user followers / following related
44
"""
55
import Ecto.Query, warn: false
6-
import Helper.Utils, only: [done: 1, ensure: 2]
7-
# import Helper.ErrorCode
8-
import ShortMaps
6+
import Helper.Utils, only: [ensure: 2]
97

10-
import GroupherServer.CMS.Helper.Matcher
8+
alias GroupherServer.{Accounts, CMS}
9+
alias Accounts.Model.{Embeds, User}
1110

12-
alias GroupherServer.Accounts.Model.{Embeds, User}
13-
alias GroupherServer.CMS.Model.Comment
14-
15-
alias Helper.{ORM, QueryBuilder}
11+
alias Helper.ORM
1612

1713
@default_meta Embeds.UserMeta.default_meta()
1814

1915
@doc """
2016
get paged published contets of a user
2117
"""
2218
def paged_published_articles(%User{id: user_id}, thread, filter) do
23-
with {:ok, info} <- match(thread),
24-
{:ok, user} <- ORM.find(User, user_id) do
25-
do_paged_published_articles(info.model, user, filter)
26-
end
19+
CMS.paged_published_articles(thread, filter, user_id)
2720
end
2821

2922
@doc """
@@ -32,60 +25,21 @@ defmodule GroupherServer.Accounts.Delegate.Publish do
3225
def update_published_states(user_id, thread) do
3326
filter = %{page: 1, size: 1}
3427

35-
with {:ok, info} <- match(thread),
36-
{:ok, user} <- ORM.find(User, user_id),
37-
{:ok, paged_published_articles} <- do_paged_published_articles(info.model, user, filter) do
38-
articles_count = paged_published_articles.total_count
39-
40-
meta =
41-
ensure(user.meta, @default_meta) |> Map.put(:"published_#{thread}s_count", articles_count)
28+
with {:ok, user} <- ORM.find(User, user_id),
29+
{:ok, paged_articles} <- CMS.paged_published_articles(thread, filter, user_id) do
30+
#
31+
user_meta = ensure(user.meta, @default_meta)
32+
meta = Map.put(user_meta, :"published_#{thread}s_count", paged_articles.total_count)
4233

4334
ORM.update_meta(user, meta)
4435
end
4536
end
4637

47-
defp do_paged_published_articles(queryable, %User{} = user, %{page: page, size: size} = filter) do
48-
queryable
49-
|> join(:inner, [article], author in assoc(article, :author))
50-
|> where([article, author], author.user_id == ^user.id)
51-
|> select([article, author], article)
52-
|> QueryBuilder.filter_pack(filter)
53-
|> ORM.paginater(~m(page size)a)
54-
|> done()
38+
def paged_published_comments(user, filter) do
39+
CMS.paged_published_comments(user, filter)
5540
end
5641

57-
def paged_published_article_comments(%User{id: user_id}, %{page: page, size: size} = filter) do
58-
with {:ok, user} <- ORM.find(User, user_id) do
59-
Comment
60-
|> join(:inner, [comment], author in assoc(comment, :author))
61-
|> where([comment, author], author.id == ^user.id)
62-
|> QueryBuilder.filter_pack(filter)
63-
|> ORM.paginater(~m(page size)a)
64-
|> ORM.extract_and_assign_article()
65-
|> done()
66-
end
67-
end
68-
69-
def paged_published_article_comments(
70-
%User{id: user_id},
71-
thread,
72-
%{page: page, size: size} = filter
73-
) do
74-
with {:ok, user} <- ORM.find(User, user_id) do
75-
thread = thread |> to_string |> String.upcase()
76-
thread_atom = thread |> String.downcase() |> String.to_atom()
77-
78-
article_preload = Keyword.new([{thread_atom, [author: :user]}])
79-
query = from(comment in Comment, preload: ^article_preload)
80-
81-
query
82-
|> join(:inner, [comment], author in assoc(comment, :author))
83-
|> where([comment, author], author.id == ^user.id)
84-
|> where([comment, author], comment.thread == ^thread)
85-
|> QueryBuilder.filter_pack(filter)
86-
|> ORM.paginater(~m(page size)a)
87-
|> ORM.extract_and_assign_article()
88-
|> done()
89-
end
42+
def paged_published_comments(user, thread, filter) do
43+
CMS.paged_published_comments(user, thread, filter)
9044
end
9145
end

lib/groupher_server/cms/cms.ex

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ defmodule GroupherServer.CMS do
8686

8787
defdelegate paged_articles(queryable, filter), to: ArticleCURD
8888
defdelegate paged_articles(queryable, filter, user), to: ArticleCURD
89+
defdelegate paged_published_articles(queryable, filter, user), to: ArticleCURD
8990

9091
defdelegate create_article(community, thread, attrs, user), to: ArticleCURD
9192
defdelegate update_article(article, attrs), to: ArticleCURD
@@ -133,6 +134,9 @@ defmodule GroupherServer.CMS do
133134
defdelegate paged_comments(thread, article_id, filters, mode), to: CommentCurd
134135
defdelegate paged_comments(thread, article_id, filters, mode, user), to: CommentCurd
135136

137+
defdelegate paged_published_comments(user, thread, filters), to: CommentCurd
138+
defdelegate paged_published_comments(user, filters), to: CommentCurd
139+
136140
defdelegate paged_folded_article_comments(thread, article_id, filters), to: CommentCurd
137141
defdelegate paged_folded_article_comments(thread, article_id, filters, user), to: CommentCurd
138142

lib/groupher_server/cms/delegates/article_curd.ex

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
9191
end
9292
end
9393

94+
@doc """
95+
get paged articles
96+
"""
9497
def paged_articles(thread, filter) do
9598
%{page: page, size: size} = filter
9699

@@ -105,14 +108,26 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
105108
end
106109

107110
def paged_articles(thread, filter, %User{} = user) do
111+
with {:ok, stateless_paged_articles} <- paged_articles(thread, filter) do
112+
stateless_paged_articles
113+
|> mark_viewer_emotion_states(user)
114+
|> mark_viewer_has_states(user)
115+
|> done()
116+
end
117+
end
118+
119+
@doc "paged published articles for accounts"
120+
def paged_published_articles(thread, filter, user_id) do
108121
%{page: page, size: size} = filter
109122

110-
with {:ok, info} <- match(thread) do
123+
with {:ok, info} <- match(thread),
124+
{:ok, user} <- ORM.find(User, user_id) do
111125
info.model
112-
|> QueryBuilder.domain_query(filter)
113-
|> QueryBuilder.filter_pack(Map.merge(filter, %{mark_delete: false}))
126+
|> join(:inner, [article], author in assoc(article, :author))
127+
|> where([article, author], author.user_id == ^user.id)
128+
|> select([article, author], article)
129+
|> QueryBuilder.filter_pack(filter)
114130
|> ORM.paginater(~m(page size)a)
115-
|> add_pin_articles_ifneed(info.model, filter)
116131
|> mark_viewer_emotion_states(user)
117132
|> mark_viewer_has_states(user)
118133
|> done()

lib/groupher_server/cms/delegates/comment_curd.ex

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,37 @@ defmodule GroupherServer.CMS.Delegate.CommentCurd do
5252
do_paged_comment(thread, article_id, filters, where_query, user)
5353
end
5454

55+
def paged_published_comments(%User{id: user_id}, filter) do
56+
%{page: page, size: size} = filter
57+
58+
Comment
59+
|> join(:inner, [comment], author in assoc(comment, :author))
60+
|> where([comment, author], author.id == ^user_id)
61+
|> QueryBuilder.filter_pack(filter)
62+
|> ORM.paginater(~m(page size)a)
63+
|> ORM.extract_and_assign_article()
64+
|> done()
65+
end
66+
67+
def paged_published_comments(%User{id: user_id}, thread, filter) do
68+
%{page: page, size: size} = filter
69+
70+
thread = thread |> to_string |> String.upcase()
71+
thread_atom = thread |> String.downcase() |> String.to_atom()
72+
73+
article_preload = Keyword.new([{thread_atom, [author: :user]}])
74+
query = from(comment in Comment, preload: ^article_preload)
75+
76+
query
77+
|> join(:inner, [comment], author in assoc(comment, :author))
78+
|> where([comment, author], comment.thread == ^thread)
79+
|> where([comment, author], author.id == ^user_id)
80+
|> QueryBuilder.filter_pack(filter)
81+
|> ORM.paginater(~m(page size)a)
82+
|> ORM.extract_and_assign_article()
83+
|> done()
84+
end
85+
5586
def paged_folded_article_comments(thread, article_id, filters) do
5687
where_query = dynamic([c], c.is_folded and not c.is_pinned)
5788
do_paged_comment(thread, article_id, filters, where_query, nil)

lib/groupher_server/cms/delegates/helper.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ defmodule GroupherServer.CMS.Delegate.Helper do
5656
defp get_supported_mentions(:comment), do: @supported_comment_emotions
5757
defp get_supported_mentions(_), do: @supported_emotions
5858

59-
def mark_viewer_emotion_states(paged_contents, nil), do: paged_contents
60-
def mark_viewer_emotion_states(%{entries: []} = paged_contents, _), do: paged_contents
61-
def mark_viewer_emotion_states(paged_contents, nil, :comment), do: paged_contents
59+
def mark_viewer_emotion_states(paged_artiments, nil), do: paged_artiments
60+
def mark_viewer_emotion_states(%{entries: []} = paged_artiments, _), do: paged_artiments
61+
def mark_viewer_emotion_states(paged_artiments, nil, :comment), do: paged_artiments
6262

6363
@doc """
6464
mark viewer emotions status for article or comment
6565
"""
6666
def mark_viewer_emotion_states(
67-
%{entries: entries} = paged_contents,
67+
%{entries: entries} = paged_artiments,
6868
%User{} = user,
6969
type \\ :article
7070
) do
@@ -84,7 +84,7 @@ defmodule GroupherServer.CMS.Delegate.Helper do
8484
Map.put(article, :emotions, updated_emotions)
8585
end)
8686

87-
%{paged_contents | entries: new_entries}
87+
%{paged_artiments | entries: new_entries}
8888
end
8989

9090
@doc """

lib/groupher_server_web/resolvers/accounts_resolver.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,17 +191,17 @@ defmodule GroupherServerWeb.Resolvers.Accounts do
191191
Accounts.paged_published_articles(cur_user, thread, filter)
192192
end
193193

194-
def paged_published_article_comments(_root, ~m(login filter thread)a, _info) do
194+
def paged_published_comments(_root, ~m(login filter thread)a, _info) do
195195
with {:ok, user_id} <- Accounts.get_userid_and_cache(login) do
196-
Accounts.paged_published_article_comments(%User{id: user_id}, thread, filter)
196+
Accounts.paged_published_comments(%User{id: user_id}, thread, filter)
197197
else
198198
_ -> raise_error(:not_exsit, "#{login} not found")
199199
end
200200
end
201201

202-
def paged_published_article_comments(_root, ~m(login filter)a, _info) do
202+
def paged_published_comments(_root, ~m(login filter)a, _info) do
203203
with {:ok, user_id} <- Accounts.get_userid_and_cache(login) do
204-
Accounts.paged_published_article_comments(%User{id: user_id}, filter)
204+
Accounts.paged_published_comments(%User{id: user_id}, filter)
205205
else
206206
_ -> raise_error(:not_exsit, "#{login} not found")
207207
end

lib/groupher_server_web/schema/account/account_queries.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,13 @@ defmodule GroupherServerWeb.Schema.Account.Queries do
121121
end
122122

123123
@desc "get paged published article comments"
124-
field :paged_published_article_comments, :paged_comments do
124+
field :paged_published_comments, :paged_comments do
125125
arg(:login, non_null(:string))
126126
arg(:filter, non_null(:paged_filter))
127127
arg(:thread, :thread, default_value: :post)
128128

129129
middleware(M.PageSizeProof)
130-
resolve(&R.Accounts.paged_published_article_comments/3)
130+
resolve(&R.Accounts.paged_published_comments/3)
131131
end
132132

133133
published_article_queries()

test/groupher_server/accounts/published/published_blogs_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ defmodule GroupherServer.Test.Accounts.Published.Blog do
8181
end)
8282

8383
filter = %{page: 1, size: 20}
84-
{:ok, articles} = Accounts.paged_published_article_comments(user, :blog, filter)
84+
{:ok, articles} = Accounts.paged_published_comments(user, :blog, filter)
8585

8686
entries = articles.entries
8787
article = entries |> List.first()

test/groupher_server/accounts/published/published_jobs_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ defmodule GroupherServer.Test.Accounts.Published.Job do
8181
end)
8282

8383
filter = %{page: 1, size: 20}
84-
{:ok, articles} = Accounts.paged_published_article_comments(user, :job, filter)
84+
{:ok, articles} = Accounts.paged_published_comments(user, :job, filter)
8585

8686
entries = articles.entries
8787
article = entries |> List.first()

0 commit comments

Comments
 (0)