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

Commit aa9fcff

Browse files
authored
chore(clean-up): unused query helper (#382)
* chore(clean-up): unused query helper * chore(clean-up): unused query helper * chore(clean-up): unused query helper wip * chore(clean-up): wip * chore(clean-up): move domain query to helper * chore(clean-up): typo and clean up * chore(clean-up): fmt & update doc
1 parent 75ddf68 commit aa9fcff

File tree

4 files changed

+53
-109
lines changed

4 files changed

+53
-109
lines changed

lib/groupher_server/cms/delegates/article_curd.ex

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
9090

9191
with {:ok, info} <- match(thread) do
9292
info.model
93-
|> domain_filter_query(filter)
93+
|> QueryBuilder.domain_query(filter)
9494
|> QueryBuilder.filter_pack(Map.merge(filter, %{mark_delete: false}))
9595
|> ORM.paginater(~m(page size)a)
9696
|> add_pin_articles_ifneed(info.model, filter)
@@ -103,7 +103,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
103103

104104
with {:ok, info} <- match(thread) do
105105
info.model
106-
|> domain_filter_query(filter)
106+
|> QueryBuilder.domain_query(filter)
107107
|> QueryBuilder.filter_pack(Map.merge(filter, %{mark_delete: false}))
108108
|> ORM.paginater(~m(page size)a)
109109
|> add_pin_articles_ifneed(info.model, filter)
@@ -328,30 +328,6 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
328328
ORM.find_by(Author, user_id: changeset.data.user_id)
329329
end
330330

331-
defp domain_filter_query(CMS.Repo = queryable, filter) do
332-
Enum.reduce(filter, queryable, fn
333-
{:sort, :most_github_star}, queryable ->
334-
queryable |> order_by(desc: :star_count)
335-
336-
{:sort, :most_github_fork}, queryable ->
337-
queryable |> order_by(desc: :fork_count)
338-
339-
{:sort, :most_github_watch}, queryable ->
340-
queryable |> order_by(desc: :watch_count)
341-
342-
{:sort, :most_github_pr}, queryable ->
343-
queryable |> order_by(desc: :prs_count)
344-
345-
{:sort, :most_github_issue}, queryable ->
346-
queryable |> order_by(desc: :issues_count)
347-
348-
{_, _}, queryable ->
349-
queryable
350-
end)
351-
end
352-
353-
defp domain_filter_query(queryable, _filter), do: queryable
354-
355331
defp add_pin_articles_ifneed(articles, querable, %{community: community} = filter) do
356332
thread = module_to_thread(querable)
357333

lib/groupher_server/cms/delegates/community_curd.ex

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,6 @@ defmodule GroupherServer.CMS.Delegate.CommunityCURD do
277277
|> join(:inner, [member], u in assoc(member, :user))
278278
|> select([member, c, u], u)
279279
|> QueryBuilder.filter_pack(filters)
280-
# |> QueryBuilder.load_inner_users(filters)
281280
|> ORM.paginater(~m(page size)a)
282281
|> done()
283282
end

lib/groupher_server/cms/helper/loader.ex

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ defmodule GroupherServer.CMS.Helper.Loader do
88

99
alias CMS.{
1010
Author,
11-
CommunityEditor,
12-
CommunitySubscriber,
1311
CommunityThread,
1412
PostComment,
1513
PostCommentLike,
@@ -33,14 +31,6 @@ defmodule GroupherServer.CMS.Helper.Loader do
3331
)
3432
end
3533

36-
def query({"communities_subscribers", CommunitySubscriber}, args) do
37-
CommunitySubscriber |> QueryBuilder.members_pack(args)
38-
end
39-
40-
def query({"communities_editors", CommunityEditor}, args) do
41-
CommunityEditor |> QueryBuilder.members_pack(args)
42-
end
43-
4434
# ------- post comments ------
4535
@doc """
4636
get unique participators join in comments
@@ -85,7 +75,18 @@ defmodule GroupherServer.CMS.Helper.Loader do
8575

8676
def query({"posts_comments_replies", PostCommentReply}, %{filter: filter}) do
8777
PostCommentReply
88-
|> QueryBuilder.load_inner_replies(filter)
78+
|> load_inner_replies(filter)
79+
end
80+
81+
@doc """
82+
load replies of the given comment
83+
TODO: remove
84+
"""
85+
defp load_inner_replies(queryable, filter) do
86+
queryable
87+
|> QueryBuilder.filter_pack(filter)
88+
|> join(:inner, [c], r in assoc(c, :reply))
89+
|> select([c, r], r)
8990
end
9091

9192
def query({"posts_comments_replies", PostCommentReply}, %{reply_to: _}) do
@@ -105,8 +106,12 @@ defmodule GroupherServer.CMS.Helper.Loader do
105106
end
106107

107108
def query({"posts_comments_likes", PostCommentLike}, %{filter: _filter} = args) do
108-
PostCommentLike
109-
|> QueryBuilder.members_pack(args)
109+
PostCommentLike |> members_pack(args)
110+
end
111+
112+
# TODO: remove it
113+
def members_pack(queryable, %{filter: filter}) do
114+
queryable |> QueryBuilder.load_inner_users(filter)
110115
end
111116

112117
# def query({"articles_comments_upvotes", ArticleCommentUpvote}, %{

lib/helper/query_builder.ex

Lines changed: 33 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,21 @@
11
defmodule Helper.QueryBuilder do
2-
# alias GroupherServer.Repo
2+
@moduledoc """
3+
handle common query pices across the project
4+
"""
5+
36
import Ecto.Query, warn: false
7+
alias GroupherServer.CMS
48

59
@doc """
6-
handle [3] situation:
7-
8-
1. basic query with filter
9-
2. reaction_user's count
10-
3. is viewer reacted?
11-
12-
bewteen [THREAD] and [REACT]
13-
[THREAD]: cms thread, include: Post, Job, Repo ...
14-
[REACT]; upvotes, stars, watchs ...
10+
load inner user field
1511
"""
16-
def members_pack(queryable, %{filter: filter}) do
17-
queryable |> load_inner_users(filter)
18-
end
19-
20-
def members_pack(queryable, %{viewer_did: _, cur_user: cur_user}) do
21-
queryable |> where([f], f.user_id == ^cur_user.id)
22-
end
23-
24-
def members_pack(queryable, %{count: _, type: :post}) do
25-
queryable
26-
|> group_by([f], f.post_id)
27-
|> select([f], count(f.id))
28-
end
29-
30-
def members_pack(queryable, %{count: _, type: :job}) do
31-
queryable
32-
|> group_by([f], f.job_id)
33-
|> select([f], count(f.id))
34-
end
35-
36-
def members_pack(queryable, %{count: _, type: :repo}) do
37-
queryable
38-
|> group_by([f], f.repo_id)
39-
|> select([f], count(f.id))
40-
end
41-
42-
def members_pack(queryable, %{count: _, type: :community}) do
43-
queryable
44-
|> group_by([f], f.community_id)
45-
|> select([f], count(f.id))
46-
end
47-
4812
def load_inner_users(queryable, filter) do
4913
queryable
5014
|> join(:inner, [f], u in assoc(f, :user))
5115
|> select([f, u], u)
5216
|> filter_pack(filter)
5317
end
5418

55-
@doc """
56-
load replies of the given comment
57-
"""
58-
def load_inner_replies(queryable, filter) do
59-
queryable
60-
|> filter_pack(filter)
61-
|> join(:inner, [c], r in assoc(c, :reply))
62-
|> select([c, r], r)
63-
end
64-
6519
@doc """
6620
inserted in latest x mounth
6721
"""
@@ -122,12 +76,9 @@ defmodule Helper.QueryBuilder do
12276
queryable |> order_by(asc: :index)
12377

12478
{:sort, :most_views}, queryable ->
125-
# this will cause error in Dialyzer
126-
# queryable |> order_by(^sort_strategy(:most_views))
12779
queryable |> order_by(desc: :views, desc: :inserted_at)
12880

12981
{:sort, :least_views}, queryable ->
130-
# queryable |> order_by(^sort_strategy(:least_views))
13182
queryable |> order_by(asc: :views, desc: :inserted_at)
13283

13384
{:sort, :most_stars}, queryable ->
@@ -136,9 +87,6 @@ defmodule Helper.QueryBuilder do
13687
{:sort, :least_stars}, queryable ->
13788
queryable |> sort_by_count(:stars, :asc)
13889

139-
{:sort, :most_likes}, queryable ->
140-
queryable |> sort_by_count(:likes, :desc)
141-
14290
{:length, :most_words}, queryable ->
14391
queryable |> order_by(desc: :length)
14492

@@ -217,25 +165,41 @@ defmodule Helper.QueryBuilder do
217165
where: t.raw == ^community_raw
218166
)
219167

220-
{:one_community, community_raw}, queryable ->
221-
from(
222-
q in queryable,
223-
join: t in assoc(q, :community),
224-
where: t.raw == ^community_raw
225-
)
226-
227168
{:first, first}, queryable ->
228169
queryable |> limit(^first)
229170

230-
# {:pin, bool}, queryable ->
231-
# queryable
232-
# |> where([p], p.pin == ^bool)
233-
234171
{:mark_delete, bool}, queryable ->
235172
queryable |> where([p], p.mark_delete == ^bool)
236173

237174
{_, _}, queryable ->
238175
queryable
239176
end)
240177
end
178+
179+
@doc """
180+
handle spec needs for CMS query filter
181+
"""
182+
def domain_query(CMS.Repo = queryable, filter) do
183+
Enum.reduce(filter, queryable, fn
184+
{:sort, :most_github_star}, queryable ->
185+
queryable |> order_by(desc: :star_count)
186+
187+
{:sort, :most_github_fork}, queryable ->
188+
queryable |> order_by(desc: :fork_count)
189+
190+
{:sort, :most_github_watch}, queryable ->
191+
queryable |> order_by(desc: :watch_count)
192+
193+
{:sort, :most_github_pr}, queryable ->
194+
queryable |> order_by(desc: :prs_count)
195+
196+
{:sort, :most_github_issue}, queryable ->
197+
queryable |> order_by(desc: :issues_count)
198+
199+
{_, _}, queryable ->
200+
queryable
201+
end)
202+
end
203+
204+
def domain_query(queryable, _filter), do: queryable
241205
end

0 commit comments

Comments
 (0)