Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commitcdbb40c

Browse files
committed
refactor(search): extract search macros
1 parent7a97134 commitcdbb40c

File tree

6 files changed

+61
-77
lines changed

6 files changed

+61
-77
lines changed

‎lib/groupher_server/cms/cms.ex‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ defmodule GroupherServer.CMS do
181181
defdelegatedelete_passport(user),to:PassportCURD
182182

183183
# search
184-
defdelegatesearch_items(part,args),to:Search
184+
defdelegatesearch_contents(part,args),to:Search
185185

186186
# seeds
187187
defdelegateseed_communities(opt),to:Seeds

‎lib/groupher_server/cms/delegates/search.ex‎

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ defmodule GroupherServer.CMS.Delegate.Search do
55

66
importHelper.Utils,only:[done:1]
77
importEcto.Query,warn:false
8+
importGroupherServer.CMS.Helper.Matcher
89

910
aliasHelper.ORM
1011
aliasGroupherServer.CMS.{Community,Post,Job,Repo}
@@ -14,40 +15,23 @@ defmodule GroupherServer.CMS.Delegate.Search do
1415
@doc"""
1516
search community by title
1617
"""
17-
defsearch_items(:community,%{title:title}=_args)do
18+
defsearch_contents(:community,%{title:title}=_args)do
1819
Community
1920
|>where([c],ilike(c.title,^"%#{title}%")orilike(c.raw,^"%#{title}%"))
2021
|>ORM.paginater(page:1,size:@search_items_count)
2122
|>done()
2223
end
2324

2425
@doc"""
25-
searchpost by title
26+
searcharticle by title
2627
"""
27-
defsearch_items(:post,%{title:title}=_args)do
28-
Post
29-
|>where([c],ilike(c.title,^"%#{title}%")orilike(c.digest,^"%#{title}%"))
30-
|>ORM.paginater(page:1,size:@search_items_count)
31-
|>done()
32-
end
33-
34-
@doc"""
35-
search job by title or company name
36-
"""
37-
defsearch_items(:job,%{title:title}=_args)do
38-
Job
39-
|>where([c],ilike(c.title,^"%#{title}%")orilike(c.company,^"%#{title}%"))
40-
|>ORM.paginater(page:1,size:@search_items_count)
41-
|>done()
42-
end
43-
44-
@doc"""
45-
search repo by title
46-
"""
47-
defsearch_items(:repo,%{title:title}=_args)do
48-
Repo
49-
|>where([c],ilike(c.title,^"%#{title}%")orilike(c.owner_name,^"%#{title}%"))
50-
|>ORM.paginater(page:1,size:@search_items_count)
51-
|>done()
28+
defsearch_contents(thread,%{title:title})do
29+
with{:ok,info}<-match(thread)do
30+
info.model
31+
# |> where([c], ilike(c.title, ^"%#{title}%") or ilike(c.digest, ^"%#{title}%"))
32+
|>where([c],ilike(c.title,^"%#{title}%"))
33+
|>ORM.paginater(page:1,size:@search_items_count)
34+
|>done()
35+
end
5236
end
5337
end

‎lib/groupher_server_web/resolvers/cms_resolver.ex‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,12 @@ defmodule GroupherServerWeb.Resolvers.CMS do
374374
CMS.add_contributor(%CMS.CommunityCheatsheet{id:id},contributor)
375375
end
376376

377-
defsearch_items(_root,%{part:part,title:title},_info)do
378-
CMS.search_items(part,%{title:title})
377+
defsearch_communities(_root,%{title:title},_info)do
378+
CMS.search_contents(:community,%{title:title})
379+
end
380+
381+
defsearch_contents(_root,%{thread:thread,title:title},_info)do
382+
CMS.search_contents(thread,%{title:title})
379383
end
380384

381385
# ##############################################

‎lib/groupher_server_web/schema/Helper/queries.ex‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,28 @@ defmodule GroupherServerWeb.Schema.Helper.Queries do
22
@moduledoc"""
33
common fields
44
"""
5+
importHelper.Utils,only:[get_config:2]
6+
57
aliasGroupherServerWeb.Middleware,as:M
68
aliasGroupherServerWeb.Resolvers,as:R
79

10+
@article_threadsget_config(:article,:article_threads)
11+
12+
defmacroarticle_search_queries()do
13+
@article_threads
14+
|>Enum.map(fnthread->
15+
quotedo
16+
@descunquote("get#{thread} by id")
17+
fieldunquote(:"search_#{thread}s"),unquote(:"paged_#{thread}s")do
18+
arg(:title,non_null(:string))
19+
arg(:thread,unquote(:"#{thread}_thread"),default_value:unquote(thread))
20+
21+
resolve(&R.CMS.search_contents/3)
22+
end
23+
end
24+
end)
25+
end
26+
827
@doc"""
928
query generator for threads, like:
1029

‎lib/groupher_server_web/schema/cms/cms_queries.ex‎

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -148,44 +148,21 @@ defmodule GroupherServerWeb.Schema.CMS.Queries do
148148
resolve(&R.CMS.paged_comments/3)
149149
end
150150

151-
@desc"search communities by title"
152-
field:search_communities,:paged_communitiesdo
153-
arg(:title,non_null(:string))
154-
arg(:part,:community_type,default_value::community)
155-
156-
resolve(&R.CMS.search_items/3)
157-
end
158-
159-
@desc"search post by title"
160-
field:search_posts,:paged_postsdo
161-
arg(:title,non_null(:string))
162-
arg(:part,:post_thread,default_value::post)
163-
164-
resolve(&R.CMS.search_items/3)
165-
end
166-
167-
@desc"search job by title"
168-
field:search_jobs,:paged_jobsdo
169-
arg(:title,non_null(:string))
170-
arg(:part,:job_thread,default_value::job)
151+
@desc"paged reports list"
152+
field:paged_abuse_reports,:paged_reportsdo
153+
arg(:filter,non_null(:report_filter))
171154

172-
resolve(&R.CMS.search_items/3)
155+
resolve(&R.CMS.paged_reports/3)
173156
end
174157

175-
@desc"searchrepo by title"
176-
field:search_repos,:paged_reposdo
158+
@desc"searchcommunities by title"
159+
field:search_communities,:paged_communitiesdo
177160
arg(:title,non_null(:string))
178-
arg(:part,:repo_thread,default_value::repo)
179161

180-
resolve(&R.CMS.search_items/3)
162+
resolve(&R.CMS.search_communities/3)
181163
end
182164

183-
@desc"paged reports list"
184-
field:paged_abuse_reports,:paged_reportsdo
185-
arg(:filter,non_null(:report_filter))
186-
187-
resolve(&R.CMS.paged_reports/3)
188-
end
165+
article_search_queries()
189166

190167
article_reacted_users_query(:upvot,&R.CMS.upvoted_users/3)
191168
article_reacted_users_query(:collect,&R.CMS.collected_users/3)

‎test/groupher_server/cms/search_test.exs‎

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,76 +23,76 @@ defmodule GroupherServer.Test.CMS.Search do
2323

2424
describe"[cms search post]"do
2525
test"search post by full title should valid paged posts"do
26-
{:ok,searched}=CMS.search_items(:post,%{title:"react"})
26+
{:ok,searched}=CMS.search_contents(:post,%{title:"react"})
2727

2828
assertsearched|>is_valid_pagination?(:raw)
2929
assertsearched.total_count==1
3030
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="react"
3131
end
3232

3333
test"search post blur title should return valid communities"do
34-
{:ok,searched}=CMS.search_items(:post,%{title:"reac"})
34+
{:ok,searched}=CMS.search_contents(:post,%{title:"reac"})
3535
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="react"
3636

37-
{:ok,searched}=CMS.search_items(:post,%{title:"rea"})
37+
{:ok,searched}=CMS.search_contents(:post,%{title:"rea"})
3838
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="react"
3939

40-
{:ok,searched}=CMS.search_items(:post,%{title:"eac"})
40+
{:ok,searched}=CMS.search_contents(:post,%{title:"eac"})
4141
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="react"
4242

43-
{:ok,searched}=CMS.search_items(:post,%{title:"每日"})
43+
{:ok,searched}=CMS.search_contents(:post,%{title:"每日"})
4444
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="每日妹子"
4545

46-
{:ok,searched}=CMS.search_items(:post,%{title:"javasc"})
46+
{:ok,searched}=CMS.search_contents(:post,%{title:"javasc"})
4747
assertsearched.total_count==1
4848
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="javascript"
4949

50-
{:ok,searched}=CMS.search_items(:post,%{title:"java"})
50+
{:ok,searched}=CMS.search_contents(:post,%{title:"java"})
5151
assertsearched.total_count==2
5252
assertsearched.entries|>Enum.any?(&(&1.title=="java"))
5353
assertsearched.entries|>Enum.any?(&(&1.title=="javascript"))
5454
end
5555

5656
test"search non exsit community should get empty pagi data"do
57-
{:ok,searched}=CMS.search_items(:community,%{title:"non-exsit"})
57+
{:ok,searched}=CMS.search_contents(:community,%{title:"non-exsit"})
5858
assertsearched|>is_valid_pagination?(:raw,:empty)
5959
end
6060
end
6161

6262
describe"[cms search community]"do
6363
test"search community by full title should valid paged communities"do
64-
{:ok,searched}=CMS.search_items(:community,%{title:"react"})
64+
{:ok,searched}=CMS.search_contents(:community,%{title:"react"})
6565

6666
assertsearched|>is_valid_pagination?(:raw)
6767
assertsearched.total_count==1
6868
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="react"
6969
end
7070

7171
test"search community blur title should return valid communities"do
72-
{:ok,searched}=CMS.search_items(:community,%{title:"reac"})
72+
{:ok,searched}=CMS.search_contents(:community,%{title:"reac"})
7373
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="react"
7474

75-
{:ok,searched}=CMS.search_items(:community,%{title:"rea"})
75+
{:ok,searched}=CMS.search_contents(:community,%{title:"rea"})
7676
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="react"
7777

78-
{:ok,searched}=CMS.search_items(:community,%{title:"eac"})
78+
{:ok,searched}=CMS.search_contents(:community,%{title:"eac"})
7979
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="react"
8080

81-
{:ok,searched}=CMS.search_items(:community,%{title:"每日"})
81+
{:ok,searched}=CMS.search_contents(:community,%{title:"每日"})
8282
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="每日妹子"
8383

84-
{:ok,searched}=CMS.search_items(:community,%{title:"javasc"})
84+
{:ok,searched}=CMS.search_contents(:community,%{title:"javasc"})
8585
assertsearched.total_count==1
8686
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="javascript"
8787

88-
{:ok,searched}=CMS.search_items(:community,%{title:"java"})
88+
{:ok,searched}=CMS.search_contents(:community,%{title:"java"})
8989
assertsearched.total_count==2
9090
assertsearched.entries|>Enum.any?(&(&1.title=="java"))
9191
assertsearched.entries|>Enum.any?(&(&1.title=="javascript"))
9292
end
9393

9494
test"search non exsit community should get empty pagi data"do
95-
{:ok,searched}=CMS.search_items(:community,%{title:"non-exsit"})
95+
{:ok,searched}=CMS.search_contents(:community,%{title:"non-exsit"})
9696
assertsearched|>is_valid_pagination?(:raw,:empty)
9797
end
9898
end

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp