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.

Commit2fb73d6

Browse files
authored
refactor(search): extract search macros (#367)
* refactor(search): extract search macros* refactor(search): differ community and article search* refactor(search): fix communities search* refactor(search): adjust communities api
1 parent7a97134 commit2fb73d6

File tree

7 files changed

+63
-78
lines changed

7 files changed

+63
-78
lines changed

‎lib/groupher_server/cms/cms.ex‎

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

183183
# search
184-
defdelegatesearch_items(part,args),to:Search
184+
defdelegatesearch_articles(thread,args),to:Search
185+
defdelegatesearch_communities(args),to:Search
185186

186187
# seeds
187188
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_communities(title)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_articles(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_communities(title)
379+
end
380+
381+
defsearch_articles(_root,%{thread:thread,title:title},_info)do
382+
CMS.search_articles(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_articles/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/community/community_test.exs‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ defmodule GroupherServer.Test.CMS.Community do
9393
assertuser.idincommunity.meta.subscribed_user_ids
9494
end
9595

96-
@tag:wip2
9796
test"user unsubscribe a community will update the community's subscribted info",
9897
~m(user community)ado
9998
{:ok,_}=CMS.subscribe_community(community,user)

‎test/groupher_server/cms/search_test.exs‎

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,76 +23,77 @@ 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_articles(: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_articles(: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_articles(: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_articles(: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_articles(: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_articles(: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_articles(: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_communities("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_communities("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

71+
@tag:wip2
7172
test"search community blur title should return valid communities"do
72-
{:ok,searched}=CMS.search_items(:community,%{title:"reac"})
73+
{:ok,searched}=CMS.search_communities("reac")
7374
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="react"
7475

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

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

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

84-
{:ok,searched}=CMS.search_items(:community,%{title:"javasc"})
85+
{:ok,searched}=CMS.search_communities("javasc")
8586
assertsearched.total_count==1
8687
assertsearched.entries|>Enum.at(0)|>Map.get(:title)=="javascript"
8788

88-
{:ok,searched}=CMS.search_items(:community,%{title:"java"})
89+
{:ok,searched}=CMS.search_communities("java")
8990
assertsearched.total_count==2
9091
assertsearched.entries|>Enum.any?(&(&1.title=="java"))
9192
assertsearched.entries|>Enum.any?(&(&1.title=="javascript"))
9293
end
9394

9495
test"search non exsit community should get empty pagi data"do
95-
{:ok,searched}=CMS.search_items(:community,%{title:"non-exsit"})
96+
{:ok,searched}=CMS.search_communities("non-exsit")
9697
assertsearched|>is_valid_pagination?(:raw,:empty)
9798
end
9899
end

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp