From eb1472c928885cb983029b43088dc8d1f30216a4 Mon Sep 17 00:00:00 2001 From: mydearxym Date: Wed, 2 Jun 2021 13:36:43 +0800 Subject: [PATCH 1/7] chore(clean-up): unused query helper --- lib/groupher_server/cms/helper/loader.ex | 14 ++++++- lib/helper/query_builder.ex | 48 +++++++++--------------- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/lib/groupher_server/cms/helper/loader.ex b/lib/groupher_server/cms/helper/loader.ex index d3c41074a..f40d507a5 100644 --- a/lib/groupher_server/cms/helper/loader.ex +++ b/lib/groupher_server/cms/helper/loader.ex @@ -84,8 +84,18 @@ defmodule GroupherServer.CMS.Helper.Loader do end def query({"posts_comments_replies", PostCommentReply}, %{filter: filter}) do - PostCommentReply - |> QueryBuilder.load_inner_replies(filter) + PostCommentReply |> load_inner_replies(filter) + end + + @doc """ + load replies of the given comment + TODO: remove + """ + defp load_inner_replies(queryable, filter) do + queryable + |> filter_pack(filter) + |> join(:inner, [c], r in assoc(c, :reply)) + |> select([c, r], r) end def query({"posts_comments_replies", PostCommentReply}, %{reply_to: _}) do diff --git a/lib/helper/query_builder.ex b/lib/helper/query_builder.ex index 1ddf852e4..b27f0d990 100644 --- a/lib/helper/query_builder.ex +++ b/lib/helper/query_builder.ex @@ -17,27 +17,23 @@ defmodule Helper.QueryBuilder do queryable |> load_inner_users(filter) end - def members_pack(queryable, %{viewer_did: _, cur_user: cur_user}) do - queryable |> where([f], f.user_id == ^cur_user.id) - end - - def members_pack(queryable, %{count: _, type: :post}) do - queryable - |> group_by([f], f.post_id) - |> select([f], count(f.id)) - end - - def members_pack(queryable, %{count: _, type: :job}) do - queryable - |> group_by([f], f.job_id) - |> select([f], count(f.id)) - end - - def members_pack(queryable, %{count: _, type: :repo}) do - queryable - |> group_by([f], f.repo_id) - |> select([f], count(f.id)) - end + # def members_pack(queryable, %{count: _, type: :post}) do + # queryable + # |> group_by([f], f.post_id) + # |> select([f], count(f.id)) + # end + + # def members_pack(queryable, %{count: _, type: :job}) do + # queryable + # |> group_by([f], f.job_id) + # |> select([f], count(f.id)) + # end + + # def members_pack(queryable, %{count: _, type: :repo}) do + # queryable + # |> group_by([f], f.repo_id) + # |> select([f], count(f.id)) + # end def members_pack(queryable, %{count: _, type: :community}) do queryable @@ -52,16 +48,6 @@ defmodule Helper.QueryBuilder do |> filter_pack(filter) end - @doc """ - load replies of the given comment - """ - def load_inner_replies(queryable, filter) do - queryable - |> filter_pack(filter) - |> join(:inner, [c], r in assoc(c, :reply)) - |> select([c, r], r) - end - @doc """ inserted in latest x mounth """ From eab7159d308deb6cfe156d25e88ddb490c37fe61 Mon Sep 17 00:00:00 2001 From: mydearxym Date: Wed, 2 Jun 2021 13:42:33 +0800 Subject: [PATCH 2/7] chore(clean-up): unused query helper --- lib/groupher_server/cms/helper/loader.ex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/groupher_server/cms/helper/loader.ex b/lib/groupher_server/cms/helper/loader.ex index f40d507a5..8dd41a39a 100644 --- a/lib/groupher_server/cms/helper/loader.ex +++ b/lib/groupher_server/cms/helper/loader.ex @@ -84,7 +84,8 @@ defmodule GroupherServer.CMS.Helper.Loader do end def query({"posts_comments_replies", PostCommentReply}, %{filter: filter}) do - PostCommentReply |> load_inner_replies(filter) + PostCommentReply + |> load_inner_replies(filter) end @doc """ @@ -93,7 +94,7 @@ defmodule GroupherServer.CMS.Helper.Loader do """ defp load_inner_replies(queryable, filter) do queryable - |> filter_pack(filter) + |> QueryBuilder.filter_pack(filter) |> join(:inner, [c], r in assoc(c, :reply)) |> select([c, r], r) end From 7458628a1fecc7b6e455c929ac47d2702052818f Mon Sep 17 00:00:00 2001 From: mydearxym Date: Wed, 2 Jun 2021 13:59:39 +0800 Subject: [PATCH 3/7] chore(clean-up): unused query helper wip --- lib/groupher_server/cms/helper/loader.ex | 12 ++++++------ lib/helper/query_builder.ex | 23 ++--------------------- 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/lib/groupher_server/cms/helper/loader.ex b/lib/groupher_server/cms/helper/loader.ex index 8dd41a39a..31e1c1365 100644 --- a/lib/groupher_server/cms/helper/loader.ex +++ b/lib/groupher_server/cms/helper/loader.ex @@ -33,13 +33,13 @@ defmodule GroupherServer.CMS.Helper.Loader do ) end - def query({"communities_subscribers", CommunitySubscriber}, args) do - CommunitySubscriber |> QueryBuilder.members_pack(args) - end + # def query({"communities_subscribers", CommunitySubscriber}, args) do + # CommunitySubscriber |> QueryBuilder.members_pack(args) + # end - def query({"communities_editors", CommunityEditor}, args) do - CommunityEditor |> QueryBuilder.members_pack(args) - end + # def query({"communities_editors", CommunityEditor}, args) do + # CommunityEditor |> QueryBuilder.members_pack(args) + # end # ------- post comments ------ @doc """ diff --git a/lib/helper/query_builder.ex b/lib/helper/query_builder.ex index b27f0d990..afc405916 100644 --- a/lib/helper/query_builder.ex +++ b/lib/helper/query_builder.ex @@ -10,37 +10,18 @@ defmodule Helper.QueryBuilder do 3. is viewer reacted? bewteen [THREAD] and [REACT] - [THREAD]: cms thread, include: Post, Job, Repo ... [REACT]; upvotes, stars, watchs ... """ def members_pack(queryable, %{filter: filter}) do queryable |> load_inner_users(filter) end - # def members_pack(queryable, %{count: _, type: :post}) do + # def members_pack(queryable, %{count: _, type: :community}) do # queryable - # |> group_by([f], f.post_id) + # |> group_by([f], f.community_id) # |> select([f], count(f.id)) # end - # def members_pack(queryable, %{count: _, type: :job}) do - # queryable - # |> group_by([f], f.job_id) - # |> select([f], count(f.id)) - # end - - # def members_pack(queryable, %{count: _, type: :repo}) do - # queryable - # |> group_by([f], f.repo_id) - # |> select([f], count(f.id)) - # end - - def members_pack(queryable, %{count: _, type: :community}) do - queryable - |> group_by([f], f.community_id) - |> select([f], count(f.id)) - end - def load_inner_users(queryable, filter) do queryable |> join(:inner, [f], u in assoc(f, :user)) From 291fcd7a16575c9675c085f21358ea01b4c4169a Mon Sep 17 00:00:00 2001 From: mydearxym Date: Wed, 2 Jun 2021 14:06:37 +0800 Subject: [PATCH 4/7] chore(clean-up): wip --- lib/groupher_server/cms/helper/loader.ex | 10 ---------- lib/helper/query_builder.ex | 6 ------ 2 files changed, 16 deletions(-) diff --git a/lib/groupher_server/cms/helper/loader.ex b/lib/groupher_server/cms/helper/loader.ex index 31e1c1365..44e5cbf99 100644 --- a/lib/groupher_server/cms/helper/loader.ex +++ b/lib/groupher_server/cms/helper/loader.ex @@ -8,8 +8,6 @@ defmodule GroupherServer.CMS.Helper.Loader do alias CMS.{ Author, - CommunityEditor, - CommunitySubscriber, CommunityThread, PostComment, PostCommentLike, @@ -33,14 +31,6 @@ defmodule GroupherServer.CMS.Helper.Loader do ) end - # def query({"communities_subscribers", CommunitySubscriber}, args) do - # CommunitySubscriber |> QueryBuilder.members_pack(args) - # end - - # def query({"communities_editors", CommunityEditor}, args) do - # CommunityEditor |> QueryBuilder.members_pack(args) - # end - # ------- post comments ------ @doc """ get unique participators join in comments diff --git a/lib/helper/query_builder.ex b/lib/helper/query_builder.ex index afc405916..662f4afc6 100644 --- a/lib/helper/query_builder.ex +++ b/lib/helper/query_builder.ex @@ -16,12 +16,6 @@ defmodule Helper.QueryBuilder do queryable |> load_inner_users(filter) end - # def members_pack(queryable, %{count: _, type: :community}) do - # queryable - # |> group_by([f], f.community_id) - # |> select([f], count(f.id)) - # end - def load_inner_users(queryable, filter) do queryable |> join(:inner, [f], u in assoc(f, :user)) From 9be343cc3cc9b50136711b8384e519e0d7ff3a9f Mon Sep 17 00:00:00 2001 From: mydearxym Date: Wed, 2 Jun 2021 14:14:04 +0800 Subject: [PATCH 5/7] chore(clean-up): move domain query to helper --- .../cms/delegates/article_curd.ex | 28 ++-------------- .../cms/delegates/community_curd.ex | 1 - lib/groupher_server/cms/helper/loader.ex | 8 +++-- lib/helper/query_builder.ex | 33 ++++++++++++++++--- 4 files changed, 37 insertions(+), 33 deletions(-) diff --git a/lib/groupher_server/cms/delegates/article_curd.ex b/lib/groupher_server/cms/delegates/article_curd.ex index 589feaee1..5eb223c99 100644 --- a/lib/groupher_server/cms/delegates/article_curd.ex +++ b/lib/groupher_server/cms/delegates/article_curd.ex @@ -90,7 +90,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do with {:ok, info} <- match(thread) do info.model - |> domain_filter_query(filter) + |> QueryBuilder.domain_uery(filter) |> QueryBuilder.filter_pack(Map.merge(filter, %{mark_delete: false})) |> ORM.paginater(~m(page size)a) |> add_pin_articles_ifneed(info.model, filter) @@ -103,7 +103,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do with {:ok, info} <- match(thread) do info.model - |> domain_filter_query(filter) + |> QueryBuilder.domain_uery(filter) |> QueryBuilder.filter_pack(Map.merge(filter, %{mark_delete: false})) |> ORM.paginater(~m(page size)a) |> add_pin_articles_ifneed(info.model, filter) @@ -328,30 +328,6 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do ORM.find_by(Author, user_id: changeset.data.user_id) end - defp domain_filter_query(CMS.Repo = queryable, filter) do - Enum.reduce(filter, queryable, fn - {:sort, :most_github_star}, queryable -> - queryable |> order_by(desc: :star_count) - - {:sort, :most_github_fork}, queryable -> - queryable |> order_by(desc: :fork_count) - - {:sort, :most_github_watch}, queryable -> - queryable |> order_by(desc: :watch_count) - - {:sort, :most_github_pr}, queryable -> - queryable |> order_by(desc: :prs_count) - - {:sort, :most_github_issue}, queryable -> - queryable |> order_by(desc: :issues_count) - - {_, _}, queryable -> - queryable - end) - end - - defp domain_filter_query(queryable, _filter), do: queryable - defp add_pin_articles_ifneed(articles, querable, %{community: community} = filter) do thread = module_to_thread(querable) diff --git a/lib/groupher_server/cms/delegates/community_curd.ex b/lib/groupher_server/cms/delegates/community_curd.ex index 6351c25ce..4e1a77e35 100644 --- a/lib/groupher_server/cms/delegates/community_curd.ex +++ b/lib/groupher_server/cms/delegates/community_curd.ex @@ -277,7 +277,6 @@ defmodule GroupherServer.CMS.Delegate.CommunityCURD do |> join(:inner, [member], u in assoc(member, :user)) |> select([member, c, u], u) |> QueryBuilder.filter_pack(filters) - # |> QueryBuilder.load_inner_users(filters) |> ORM.paginater(~m(page size)a) |> done() end diff --git a/lib/groupher_server/cms/helper/loader.ex b/lib/groupher_server/cms/helper/loader.ex index 44e5cbf99..51f8a4348 100644 --- a/lib/groupher_server/cms/helper/loader.ex +++ b/lib/groupher_server/cms/helper/loader.ex @@ -106,8 +106,12 @@ defmodule GroupherServer.CMS.Helper.Loader do end def query({"posts_comments_likes", PostCommentLike}, %{filter: _filter} = args) do - PostCommentLike - |> QueryBuilder.members_pack(args) + PostCommentLike |> members_pack(args) + end + + # TODO: remove it + def members_pack(queryable, %{filter: filter}) do + queryable |> QueryBuilder.load_inner_users(filter) end # def query({"articles_comments_upvotes", ArticleCommentUpvote}, %{ diff --git a/lib/helper/query_builder.ex b/lib/helper/query_builder.ex index 662f4afc6..5ec405454 100644 --- a/lib/helper/query_builder.ex +++ b/lib/helper/query_builder.ex @@ -2,6 +2,8 @@ defmodule Helper.QueryBuilder do # alias GroupherServer.Repo import Ecto.Query, warn: false + alias GroupherServer.CMS + @doc """ handle [3] situation: @@ -12,10 +14,6 @@ defmodule Helper.QueryBuilder do bewteen [THREAD] and [REACT] [REACT]; upvotes, stars, watchs ... """ - def members_pack(queryable, %{filter: filter}) do - queryable |> load_inner_users(filter) - end - def load_inner_users(queryable, filter) do queryable |> join(:inner, [f], u in assoc(f, :user)) @@ -199,4 +197,31 @@ defmodule Helper.QueryBuilder do queryable end) end + + @doc """ + handle spec needs for CMS query filter + """ + def domain_query(CMS.Repo = queryable, filter) do + Enum.reduce(filter, queryable, fn + {:sort, :most_github_star}, queryable -> + queryable |> order_by(desc: :star_count) + + {:sort, :most_github_fork}, queryable -> + queryable |> order_by(desc: :fork_count) + + {:sort, :most_github_watch}, queryable -> + queryable |> order_by(desc: :watch_count) + + {:sort, :most_github_pr}, queryable -> + queryable |> order_by(desc: :prs_count) + + {:sort, :most_github_issue}, queryable -> + queryable |> order_by(desc: :issues_count) + + {_, _}, queryable -> + queryable + end) + end + + def domain_query(queryable, _filter), do: queryable end From abdf904444507bf3b710ffdc09f86e98a6bf4d45 Mon Sep 17 00:00:00 2001 From: mydearxym Date: Wed, 2 Jun 2021 14:23:39 +0800 Subject: [PATCH 6/7] chore(clean-up): typo and clean up --- lib/groupher_server/cms/delegates/article_curd.ex | 4 ++-- lib/helper/query_builder.ex | 11 ----------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/lib/groupher_server/cms/delegates/article_curd.ex b/lib/groupher_server/cms/delegates/article_curd.ex index 5eb223c99..71f791ddf 100644 --- a/lib/groupher_server/cms/delegates/article_curd.ex +++ b/lib/groupher_server/cms/delegates/article_curd.ex @@ -90,7 +90,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do with {:ok, info} <- match(thread) do info.model - |> QueryBuilder.domain_uery(filter) + |> QueryBuilder.domain_query(filter) |> QueryBuilder.filter_pack(Map.merge(filter, %{mark_delete: false})) |> ORM.paginater(~m(page size)a) |> add_pin_articles_ifneed(info.model, filter) @@ -103,7 +103,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do with {:ok, info} <- match(thread) do info.model - |> QueryBuilder.domain_uery(filter) + |> QueryBuilder.domain_query(filter) |> QueryBuilder.filter_pack(Map.merge(filter, %{mark_delete: false})) |> ORM.paginater(~m(page size)a) |> add_pin_articles_ifneed(info.model, filter) diff --git a/lib/helper/query_builder.ex b/lib/helper/query_builder.ex index 5ec405454..e3a66a1c8 100644 --- a/lib/helper/query_builder.ex +++ b/lib/helper/query_builder.ex @@ -176,20 +176,9 @@ defmodule Helper.QueryBuilder do where: t.raw == ^community_raw ) - {:one_community, community_raw}, queryable -> - from( - q in queryable, - join: t in assoc(q, :community), - where: t.raw == ^community_raw - ) - {:first, first}, queryable -> queryable |> limit(^first) - # {:pin, bool}, queryable -> - # queryable - # |> where([p], p.pin == ^bool) - {:mark_delete, bool}, queryable -> queryable |> where([p], p.mark_delete == ^bool) From 2e63eddad12721a47597908e0475231a212eb4f2 Mon Sep 17 00:00:00 2001 From: mydearxym Date: Wed, 2 Jun 2021 14:31:21 +0800 Subject: [PATCH 7/7] chore(clean-up): fmt & update doc --- lib/helper/query_builder.ex | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/lib/helper/query_builder.ex b/lib/helper/query_builder.ex index e3a66a1c8..773edf22d 100644 --- a/lib/helper/query_builder.ex +++ b/lib/helper/query_builder.ex @@ -1,18 +1,13 @@ defmodule Helper.QueryBuilder do - # alias GroupherServer.Repo - import Ecto.Query, warn: false + @moduledoc """ + handle common query pices across the project + """ + import Ecto.Query, warn: false alias GroupherServer.CMS @doc """ - handle [3] situation: - - 1. basic query with filter - 2. reaction_user's count - 3. is viewer reacted? - - bewteen [THREAD] and [REACT] - [REACT]; upvotes, stars, watchs ... + load inner user field """ def load_inner_users(queryable, filter) do queryable @@ -81,12 +76,9 @@ defmodule Helper.QueryBuilder do queryable |> order_by(asc: :index) {:sort, :most_views}, queryable -> - # this will cause error in Dialyzer - # queryable |> order_by(^sort_strategy(:most_views)) queryable |> order_by(desc: :views, desc: :inserted_at) {:sort, :least_views}, queryable -> - # queryable |> order_by(^sort_strategy(:least_views)) queryable |> order_by(asc: :views, desc: :inserted_at) {:sort, :most_stars}, queryable -> @@ -95,9 +87,6 @@ defmodule Helper.QueryBuilder do {:sort, :least_stars}, queryable -> queryable |> sort_by_count(:stars, :asc) - {:sort, :most_likes}, queryable -> - queryable |> sort_by_count(:likes, :desc) - {:length, :most_words}, queryable -> queryable |> order_by(desc: :length)