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

Commit 02f4663

Browse files
authored
refactor(cms-metrics): remove interface usage (#387)
* refactor(cms-metrics): remove interface usage * refactor(cms-metrics): remove interface def * refactor(cms-metrics): remove interface def * refactor(cms-metrics): re-org interface workflow * refactor(cms-metrics): extarct & clean common gq macros
1 parent 5e6ac6c commit 02f4663

File tree

7 files changed

+109
-159
lines changed

7 files changed

+109
-159
lines changed

lib/groupher_server/cms/delegates/article_curd.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
1212
pick_by: 2,
1313
integerfy: 1,
1414
strip_struct: 1,
15-
module_to_thread: 1,
15+
module_to_atom: 1,
1616
get_config: 2,
1717
ensure: 2
1818
]
@@ -333,7 +333,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do
333333
end
334334

335335
defp add_pin_articles_ifneed(articles, querable, %{community: community} = filter) do
336-
thread = module_to_thread(querable)
336+
thread = module_to_atom(querable)
337337

338338
with true <- should_add_pin?(filter),
339339
true <- 1 == Map.get(articles, :page_number),

lib/groupher_server_web/schema/Helper/fields.ex

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,50 @@ defmodule GroupherServerWeb.Schema.Helper.Fields do
1212

1313
@article_threads get_config(:article, :threads)
1414

15+
@doc "general article fields for grqphql resolve fields"
16+
defmacro general_article_fields() do
17+
quote do
18+
field(:id, :id)
19+
field(:title, :string)
20+
field(:views, :integer)
21+
field(:is_pinned, :boolean)
22+
field(:mark_delete, :boolean)
23+
24+
field(:article_tags, list_of(:article_tag), resolve: dataloader(CMS, :article_tags))
25+
field(:author, :user, resolve: dataloader(CMS, :author))
26+
field(:original_community, :community, resolve: dataloader(CMS, :original_community))
27+
field(:communities, list_of(:community), resolve: dataloader(CMS, :communities))
28+
29+
field(:meta, :article_meta)
30+
field(:upvotes_count, :integer)
31+
field(:collects_count, :integer)
32+
field(:emotions, :article_emotions)
33+
34+
field(:viewer_has_collected, :boolean)
35+
field(:viewer_has_upvoted, :boolean)
36+
field(:viewer_has_viewed, :boolean)
37+
field(:viewer_has_reported, :boolean)
38+
end
39+
end
40+
41+
defmacro article_thread_enums do
42+
@article_threads
43+
|> Enum.map(fn thread ->
44+
quote do
45+
enum(unquote(:"#{thread}_thread"), do: value(unquote(thread)))
46+
end
47+
end)
48+
end
49+
50+
defmacro article_values do
51+
@article_threads
52+
|> Enum.map(fn thread ->
53+
quote do
54+
value(unquote(thread))
55+
end
56+
end)
57+
end
58+
1559
defmacro timestamp_fields(:article) do
1660
quote do
1761
field(:inserted_at, :datetime)
@@ -86,15 +130,7 @@ defmodule GroupherServerWeb.Schema.Helper.Fields do
86130
end)
87131
end
88132

89-
defmacro viewer_has_state_fields do
90-
quote do
91-
field(:viewer_has_collected, :boolean)
92-
field(:viewer_has_upvoted, :boolean)
93-
field(:viewer_has_viewed, :boolean)
94-
field(:viewer_has_reported, :boolean)
95-
end
96-
end
97-
133+
# TODO: remove
98134
defmacro comments_fields do
99135
quote do
100136
field(:id, :id)
@@ -120,16 +156,6 @@ defmodule GroupherServerWeb.Schema.Helper.Fields do
120156
middleware(M.ConvertToInt)
121157
end
122158

123-
field :viewer_has_liked, :boolean do
124-
arg(:viewer_did, :viewer_did_type, default_value: :viewer_did)
125-
126-
middleware(M.Authorize, :login)
127-
# put current user into dataloader's args
128-
middleware(M.PutCurrentUser)
129-
resolve(dataloader(CMS, :likes))
130-
middleware(M.ViewerDidConvert)
131-
end
132-
133159
field :replies, list_of(:comment) do
134160
arg(:filter, :members_filter)
135161

@@ -157,6 +183,7 @@ defmodule GroupherServerWeb.Schema.Helper.Fields do
157183
end
158184
end
159185

186+
# TODO: remove
160187
defmacro comments_counter_fields(thread) do
161188
quote do
162189
# @dec "total comments of the post"
@@ -170,7 +197,6 @@ defmodule GroupherServerWeb.Schema.Helper.Fields do
170197
# @desc "unique participator list of a the comments"
171198
field :comments_participators, list_of(:user) do
172199
arg(:filter, :members_filter)
173-
arg(:unique, :unique_type, default_value: true)
174200

175201
# middleware(M.ForceLoader)
176202
middleware(M.PageSizeProof)

lib/groupher_server_web/schema/cms/cms_metrics.ex

Lines changed: 17 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -4,51 +4,36 @@ defmodule GroupherServerWeb.Schema.CMS.Metrics do
44
"""
55
use Absinthe.Schema.Notation
66
import GroupherServerWeb.Schema.Helper.Fields
7-
alias GroupherServer.CMS
87

9-
alias CMS.Model.{Post, Job, Repo}
8+
import Helper.Utils, only: [module_to_atom: 1]
109

1110
@default_inner_page_size 5
1211

13-
enum(:post_thread, do: value(:post))
14-
enum(:job_thread, do: value(:job))
15-
enum(:repo_thread, do: value(:repo))
16-
17-
enum(:community_type, do: value(:community))
18-
enum(:comment_replies_type, do: value(:comment_replies_type))
19-
20-
enum(:count_type, do: value(:count))
21-
enum(:viewer_did_type, do: value(:viewer_did))
22-
23-
enum(:star_action, do: value(:star))
24-
enum(:comment_action, do: value(:comment))
25-
26-
enum :unique_type do
27-
value(true)
28-
value(false)
29-
end
12+
@doc """
13+
only used for reaction result, like: upvote/collect/watch ...
14+
"""
15+
interface :article do
16+
# article 所包含的共同字段
17+
field(:id, :id)
18+
field(:title, :string)
19+
field(:views, :integer)
3020

31-
enum :react_action do
32-
value(:collect)
33-
value(:upvote)
34-
# value(:watch)
21+
# 这里只是遵循 absinthe 的规范,并不是指返回以下的字段
22+
resolve_type(fn parent_module, _ -> module_to_atom(parent_module) end)
3523
end
3624

37-
enum :reactable_action do
38-
value(:upvote)
39-
# value(:collect)
40-
# value(:watch)
41-
end
25+
article_thread_enums()
4226

27+
# TODO: remove
28+
enum(:count_type, do: value(:count))
29+
# TODO: remove
4330
enum :cms_comment do
4431
value(:post_comment)
4532
end
4633

4734
enum :thread do
48-
value(:post)
49-
value(:job)
35+
article_values()
5036
value(:user)
51-
value(:repo)
5237
value(:wiki)
5338
value(:cheatsheet)
5439
# home community
@@ -266,9 +251,7 @@ defmodule GroupherServerWeb.Schema.CMS.Metrics do
266251
end
267252

268253
enum :report_content_type do
269-
value(:post)
270-
value(:job)
271-
value(:repo)
254+
article_values()
272255
value(:account)
273256
value(:article_comment)
274257
# value(:community)
@@ -285,47 +268,4 @@ defmodule GroupherServerWeb.Schema.CMS.Metrics do
285268
# min_case_count,
286269
# max_case_count,
287270
end
288-
289-
@doc """
290-
only used for reaction result, like: upvote/collect/watch ...
291-
"""
292-
interface :article do
293-
field(:id, :id)
294-
# field(:title, :string)
295-
296-
# TODO: remove the domain part
297-
resolve_type(fn
298-
%Post{}, _ -> :post
299-
%Job{}, _ -> :job
300-
%Repo{}, _ -> :repo
301-
_, _ -> nil
302-
end)
303-
end
304-
305-
# @desc """
306-
# The `DateTime` scalar type represents a date and time in the UTC
307-
# timezone. The DateTime appears in a JSON response as an ISO8601 formatted
308-
# string, including UTC timezone ("Z"). The parsed date and time string will
309-
# be converted to UTC and any UTC offset other than 0 will be rejected.
310-
# """
311-
# scalar :datetime, name: "DateTime" do
312-
# serialize &DateTime.to_iso8601/1
313-
# parse &parse_datetime/1
314-
# end
315-
316-
# @spec parse_datetime(Absinthe.Blueprint.Input.String.t) :: {:ok, DateTime.t} | :error
317-
# @spec parse_datetime(Absinthe.Blueprint.Input.Null.t) :: {:ok, nil}
318-
# defp parse_datetime(%Absinthe.Blueprint.Input.String{value: value}) do
319-
# case DateTime.from_iso8601(value) do
320-
# {:ok, datetime, 0} -> {:ok, datetime}
321-
# {:ok, _datetime, _offset} -> :error
322-
# _error -> :error
323-
# end
324-
# end
325-
# defp parse_datetime(%Absinthe.Blueprint.Input.Null{}) do
326-
# {:ok, nil}
327-
# end
328-
# defp parse_datetime(_) do
329-
# :error
330-
# end
331271
end

lib/groupher_server_web/schema/cms/cms_types.ex

Lines changed: 14 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -52,25 +52,15 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
5252
object :post do
5353
meta(:cache, max_age: 30)
5454
interface(:article)
55-
field(:id, :id)
56-
field(:title, :string)
55+
56+
general_article_fields()
57+
article_comments_fields()
58+
5759
field(:digest, :string)
5860
field(:length, :integer)
5961
field(:link_addr, :string)
6062
field(:copy_right, :string)
6163
field(:body, :string)
62-
field(:views, :integer)
63-
# NOTE: only meaningful in paged-xxx queries
64-
field(:is_pinned, :boolean)
65-
field(:mark_delete, :boolean)
66-
field(:article_tags, list_of(:article_tag), resolve: dataloader(CMS, :article_tags))
67-
68-
field(:author, :user, resolve: dataloader(CMS, :author))
69-
field(:original_community, :community, resolve: dataloader(CMS, :original_community))
70-
field(:communities, list_of(:community), resolve: dataloader(CMS, :communities))
71-
72-
field(:meta, :article_meta)
73-
field(:emotions, :article_emotions)
7464

7565
field :comments, list_of(:comment) do
7666
arg(:filter, :members_filter)
@@ -79,8 +69,6 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
7969
resolve(dataloader(CMS, :comments))
8070
end
8171

82-
# comments_count
83-
# comments_participators / paged
8472
comments_counter_fields(:post)
8573

8674
@desc "totalCount of unique participator list of a the comments"
@@ -94,18 +82,18 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
9482
end)
9583
end
9684

97-
article_comments_fields()
98-
viewer_has_state_fields()
99-
# upvoted_count
85+
# upvoted_count ?
10086
# collected_count
10187

10288
timestamp_fields(:article)
10389
end
10490

10591
object :job do
10692
interface(:article)
107-
field(:id, :id)
108-
field(:title, :string)
93+
94+
general_article_fields()
95+
article_comments_fields()
96+
10997
field(:desc, :string)
11098
field(:company, :string)
11199
field(:company_link, :string)
@@ -114,34 +102,19 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
114102
field(:link_addr, :string)
115103
field(:copy_right, :string)
116104
field(:body, :string)
117-
field(:views, :integer)
118-
119-
field(:is_pinned, :boolean)
120-
field(:mark_delete, :boolean)
121105

122-
field(:author, :user, resolve: dataloader(CMS, :author))
123-
field(:article_tags, list_of(:article_tag), resolve: dataloader(CMS, :article_tags))
124-
field(:original_community, :community, resolve: dataloader(CMS, :original_community))
125-
field(:communities, list_of(:community), resolve: dataloader(CMS, :communities))
126-
127-
field(:meta, :article_meta)
128-
field(:emotions, :article_emotions)
129-
130-
# comments_count
131-
# comments_participators
132-
article_comments_fields()
133-
viewer_has_state_fields()
134106
timestamp_fields(:article)
135107
end
136108

137109
object :repo do
138-
# interface(:article)
139-
field(:id, :id)
140-
field(:title, :string)
110+
interface(:article)
111+
112+
general_article_fields()
113+
article_comments_fields()
114+
141115
field(:owner_name, :string)
142116
field(:owner_url, :string)
143117
field(:repo_url, :string)
144-
field(:author, :user, resolve: dataloader(CMS, :author))
145118

146119
field(:desc, :string)
147120
field(:homepage_url, :string)
@@ -159,21 +132,8 @@ defmodule GroupherServerWeb.Schema.CMS.Types do
159132

160133
field(:contributors, list_of(:repo_contributor))
161134

162-
field(:views, :integer)
163-
field(:is_pinned, :boolean)
164-
field(:mark_delete, :boolean)
165-
166135
field(:last_sync, :datetime)
167136

168-
field(:article_tags, list_of(:article_tag), resolve: dataloader(CMS, :article_tags))
169-
field(:original_community, :community, resolve: dataloader(CMS, :original_community))
170-
field(:communities, list_of(:community), resolve: dataloader(CMS, :communities))
171-
172-
article_comments_fields()
173-
viewer_has_state_fields()
174-
# comments_count
175-
# comments_participators
176-
177137
timestamp_fields(:article)
178138
end
179139

0 commit comments

Comments
 (0)