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

Commit d2f07d0

Browse files
committed
refactor(cms-metrics): extarct & clean common gq macros
1 parent 045d2fe commit d2f07d0

File tree

3 files changed

+64
-107
lines changed

3 files changed

+64
-107
lines changed

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: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,45 +22,18 @@ defmodule GroupherServerWeb.Schema.CMS.Metrics do
2222
resolve_type(fn parent_module, _ -> module_to_atom(parent_module) end)
2323
end
2424

25-
enum(:post_thread, do: value(:post))
26-
enum(:job_thread, do: value(:job))
27-
enum(:repo_thread, do: value(:repo))
28-
29-
enum(:community_type, do: value(:community))
30-
enum(:comment_replies_type, do: value(:comment_replies_type))
25+
article_thread_enums()
3126

27+
# TODO: remove
3228
enum(:count_type, do: value(:count))
33-
enum(:viewer_did_type, do: value(:viewer_did))
34-
35-
enum(:star_action, do: value(:star))
36-
enum(:comment_action, do: value(:comment))
37-
38-
enum :unique_type do
39-
value(true)
40-
value(false)
41-
end
42-
43-
enum :react_action do
44-
value(:collect)
45-
value(:upvote)
46-
# value(:watch)
47-
end
48-
49-
enum :reactable_action do
50-
value(:upvote)
51-
# value(:collect)
52-
# value(:watch)
53-
end
54-
29+
# TODO: remove
5530
enum :cms_comment do
5631
value(:post_comment)
5732
end
5833

5934
enum :thread do
60-
value(:post)
61-
value(:job)
35+
article_values()
6236
value(:user)
63-
value(:repo)
6437
value(:wiki)
6538
value(:cheatsheet)
6639
# home community
@@ -278,9 +251,7 @@ defmodule GroupherServerWeb.Schema.CMS.Metrics do
278251
end
279252

280253
enum :report_content_type do
281-
value(:post)
282-
value(:job)
283-
value(:repo)
254+
article_values()
284255
value(:account)
285256
value(:article_comment)
286257
# value(:community)

lib/groupher_server_web/schema/cms/cms_types.ex

Lines changed: 13 additions & 53 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)
121-
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)
129105

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
138110
interface(:article)
139-
field(:id, :id)
140-
field(:title, :string)
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)