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.

refactor(search): extract search macros#367

Merged
mydearxym merged 4 commits intodevfromsearch_macros
May 22, 2021
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletionlib/groupher_server/cms/cms.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -181,7 +181,8 @@ defmodule GroupherServer.CMS do
defdelegate delete_passport(user), to: PassportCURD

# search
defdelegate search_items(part, args), to: Search
defdelegate search_articles(thread, args), to: Search
defdelegate search_communities(args), to: Search

# seeds
defdelegate seed_communities(opt), to: Seeds
Expand Down
38 changes: 11 additions & 27 deletionslib/groupher_server/cms/delegates/search.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,6 +5,7 @@ defmodule GroupherServer.CMS.Delegate.Search do

import Helper.Utils, only: [done: 1]
import Ecto.Query, warn: false
import GroupherServer.CMS.Helper.Matcher

alias Helper.ORM
alias GroupherServer.CMS.{Community, Post, Job, Repo}
Expand All@@ -14,40 +15,23 @@ defmodule GroupherServer.CMS.Delegate.Search do
@doc """
search community by title
"""
defsearch_items(:community, %{title: title} = _args) do
defsearch_communities(title) do
Community
|> where([c], ilike(c.title, ^"%#{title}%") or ilike(c.raw, ^"%#{title}%"))
|> ORM.paginater(page: 1, size: @search_items_count)
|> done()
end

@doc """
searchpost by title
searcharticle by title
"""
def search_items(:post, %{title: title} = _args) do
Post
|> where([c], ilike(c.title, ^"%#{title}%") or ilike(c.digest, ^"%#{title}%"))
|> ORM.paginater(page: 1, size: @search_items_count)
|> done()
end

@doc """
search job by title or company name
"""
def search_items(:job, %{title: title} = _args) do
Job
|> where([c], ilike(c.title, ^"%#{title}%") or ilike(c.company, ^"%#{title}%"))
|> ORM.paginater(page: 1, size: @search_items_count)
|> done()
end

@doc """
search repo by title
"""
def search_items(:repo, %{title: title} = _args) do
Repo
|> where([c], ilike(c.title, ^"%#{title}%") or ilike(c.owner_name, ^"%#{title}%"))
|> ORM.paginater(page: 1, size: @search_items_count)
|> done()
def search_articles(thread, %{title: title}) do
with {:ok, info} <- match(thread) do
info.model
# |> where([c], ilike(c.title, ^"%#{title}%") or ilike(c.digest, ^"%#{title}%"))
|> where([c], ilike(c.title, ^"%#{title}%"))
|> ORM.paginater(page: 1, size: @search_items_count)
|> done()
end
end
end
8 changes: 6 additions & 2 deletionslib/groupher_server_web/resolvers/cms_resolver.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -374,8 +374,12 @@ defmodule GroupherServerWeb.Resolvers.CMS do
CMS.add_contributor(%CMS.CommunityCheatsheet{id: id}, contributor)
end

def search_items(_root, %{part: part, title: title}, _info) do
CMS.search_items(part, %{title: title})
def search_communities(_root, %{title: title}, _info) do
CMS.search_communities(title)
end

def search_articles(_root, %{thread: thread, title: title}, _info) do
CMS.search_articles(thread, %{title: title})
end

# ##############################################
Expand Down
19 changes: 19 additions & 0 deletionslib/groupher_server_web/schema/Helper/queries.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,28 @@ defmodule GroupherServerWeb.Schema.Helper.Queries do
@moduledoc """
common fields
"""
import Helper.Utils, only: [get_config: 2]

alias GroupherServerWeb.Middleware, as: M
alias GroupherServerWeb.Resolvers, as: R

@article_threads get_config(:article, :article_threads)

defmacro article_search_queries() do
@article_threads
|> Enum.map(fn thread ->
quote do
@desc unquote("get #{thread} by id")
field unquote(:"search_#{thread}s"), unquote(:"paged_#{thread}s") do
arg(:title, non_null(:string))
arg(:thread, unquote(:"#{thread}_thread"), default_value: unquote(thread))

resolve(&R.CMS.search_articles/3)
end
end
end)
end

@doc """
query generator for threads, like:

Expand Down
39 changes: 8 additions & 31 deletionslib/groupher_server_web/schema/cms/cms_queries.ex
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -148,44 +148,21 @@ defmodule GroupherServerWeb.Schema.CMS.Queries do
resolve(&R.CMS.paged_comments/3)
end

@desc "search communities by title"
field :search_communities, :paged_communities do
arg(:title, non_null(:string))
arg(:part, :community_type, default_value: :community)

resolve(&R.CMS.search_items/3)
end

@desc "search post by title"
field :search_posts, :paged_posts do
arg(:title, non_null(:string))
arg(:part, :post_thread, default_value: :post)

resolve(&R.CMS.search_items/3)
end

@desc "search job by title"
field :search_jobs, :paged_jobs do
arg(:title, non_null(:string))
arg(:part, :job_thread, default_value: :job)
@desc "paged reports list"
field :paged_abuse_reports, :paged_reports do
arg(:filter, non_null(:report_filter))

resolve(&R.CMS.search_items/3)
resolve(&R.CMS.paged_reports/3)
end

@desc "searchrepo by title"
field :search_repos, :paged_repos do
@desc "searchcommunities by title"
field :search_communities, :paged_communities do
arg(:title, non_null(:string))
arg(:part, :repo_thread, default_value: :repo)

resolve(&R.CMS.search_items/3)
resolve(&R.CMS.search_communities/3)
end

@desc "paged reports list"
field :paged_abuse_reports, :paged_reports do
arg(:filter, non_null(:report_filter))

resolve(&R.CMS.paged_reports/3)
end
article_search_queries()

article_reacted_users_query(:upvot, &R.CMS.upvoted_users/3)
article_reacted_users_query(:collect, &R.CMS.collected_users/3)
Expand Down
1 change: 0 additions & 1 deletiontest/groupher_server/cms/community/community_test.exs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -93,7 +93,6 @@ defmodule GroupherServer.Test.CMS.Community do
assert user.id in community.meta.subscribed_user_ids
end

@tag :wip2
test "user unsubscribe a community will update the community's subscribted info",
~m(user community)a do
{:ok, _} = CMS.subscribe_community(community, user)
Expand Down
33 changes: 17 additions & 16 deletionstest/groupher_server/cms/search_test.exs
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,76 +23,77 @@ defmodule GroupherServer.Test.CMS.Search do

describe "[cms search post]" do
test "search post by full title should valid paged posts" do
{:ok, searched} = CMS.search_items(:post, %{title: "react"})
{:ok, searched} = CMS.search_articles(:post, %{title: "react"})

assert searched |> is_valid_pagination?(:raw)
assert searched.total_count == 1
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "react"
end

test "search post blur title should return valid communities" do
{:ok, searched} = CMS.search_items(:post, %{title: "reac"})
{:ok, searched} = CMS.search_articles(:post, %{title: "reac"})
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "react"

{:ok, searched} = CMS.search_items(:post, %{title: "rea"})
{:ok, searched} = CMS.search_articles(:post, %{title: "rea"})
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "react"

{:ok, searched} = CMS.search_items(:post, %{title: "eac"})
{:ok, searched} = CMS.search_articles(:post, %{title: "eac"})
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "react"

{:ok, searched} = CMS.search_items(:post, %{title: "每日"})
{:ok, searched} = CMS.search_articles(:post, %{title: "每日"})
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "每日妹子"

{:ok, searched} = CMS.search_items(:post, %{title: "javasc"})
{:ok, searched} = CMS.search_articles(:post, %{title: "javasc"})
assert searched.total_count == 1
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "javascript"

{:ok, searched} = CMS.search_items(:post, %{title: "java"})
{:ok, searched} = CMS.search_articles(:post, %{title: "java"})
assert searched.total_count == 2
assert searched.entries |> Enum.any?(&(&1.title == "java"))
assert searched.entries |> Enum.any?(&(&1.title == "javascript"))
end

test "search non exsit community should get empty pagi data" do
{:ok, searched} = CMS.search_items(:community, %{title:"non-exsit"})
{:ok, searched} = CMS.search_communities("non-exsit")
assert searched |> is_valid_pagination?(:raw, :empty)
end
end

describe "[cms search community]" do
test "search community by full title should valid paged communities" do
{:ok, searched} = CMS.search_items(:community, %{title:"react"})
{:ok, searched} = CMS.search_communities("react")

assert searched |> is_valid_pagination?(:raw)
assert searched.total_count == 1
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "react"
end

@tag :wip2
test "search community blur title should return valid communities" do
{:ok, searched} = CMS.search_items(:community, %{title:"reac"})
{:ok, searched} = CMS.search_communities("reac")
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "react"

{:ok, searched} = CMS.search_items(:community, %{title:"rea"})
{:ok, searched} = CMS.search_communities("rea")
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "react"

{:ok, searched} = CMS.search_items(:community, %{title:"eac"})
{:ok, searched} = CMS.search_communities("eac")
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "react"

{:ok, searched} = CMS.search_items(:community, %{title:"每日"})
{:ok, searched} = CMS.search_communities("每日")
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "每日妹子"

{:ok, searched} = CMS.search_items(:community, %{title:"javasc"})
{:ok, searched} = CMS.search_communities("javasc")
assert searched.total_count == 1
assert searched.entries |> Enum.at(0) |> Map.get(:title) == "javascript"

{:ok, searched} = CMS.search_items(:community, %{title:"java"})
{:ok, searched} = CMS.search_communities("java")
assert searched.total_count == 2
assert searched.entries |> Enum.any?(&(&1.title == "java"))
assert searched.entries |> Enum.any?(&(&1.title == "javascript"))
end

test "search non exsit community should get empty pagi data" do
{:ok, searched} = CMS.search_items(:community, %{title:"non-exsit"})
{:ok, searched} = CMS.search_communities("non-exsit")
assert searched |> is_valid_pagination?(:raw, :empty)
end
end
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp