Skip to content

Commit c99a361

Browse files
committed
Add user filter by first, last, username
1 parent 939b6c0 commit c99a361

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

lib/code_corps/helpers/query.ex

+15
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,21 @@ defmodule CodeCorps.Helpers.Query do
6565

6666
# end comment queries
6767

68+
# user queries
69+
70+
def user_filter(query, %{"query" => query_string}) do
71+
query
72+
|> where(
73+
[object],
74+
ilike(object.first_name, ^"%#{query_string}%") or
75+
ilike(object.last_name, ^"%#{query_string}%") or
76+
ilike(object.username, ^"%#{query_string}%")
77+
)
78+
end
79+
def user_filter(query, _), do: query
80+
81+
# end user queries
82+
6883
# sorting
6984

7085
def sort_by_newest_first(query), do: query |> order_by([desc: :inserted_at])

test/controllers/user_controller_test.exs

+26
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,32 @@ defmodule CodeCorps.UserControllerTest do
4444
|> json_response(200)
4545
|> assert_ids_from_response([user_1.id, user_2.id])
4646
end
47+
48+
test "returns search results on index", %{conn: conn} do
49+
user_1 = insert(:user, first_name: "Joe")
50+
user_2 = insert(:user, username: "joecoder")
51+
user_3 = insert(:user, last_name: "Jacko")
52+
insert(:user, first_name: "Max")
53+
54+
params = %{"query" => "j"}
55+
path = conn |> user_path(:index, params)
56+
57+
conn
58+
|> get(path)
59+
|> json_response(200)
60+
|> assert_ids_from_response([user_1.id, user_2.id, user_3.id])
61+
end
62+
63+
test "limit filter limits results on index", %{conn: conn} do
64+
insert_list(6, :user)
65+
66+
params = %{"limit" => 5}
67+
path = conn |> user_path(:index, params)
68+
json = conn |> get(path) |> json_response(200)
69+
70+
returned_users_length = json["data"] |> length
71+
assert returned_users_length == 5
72+
end
4773
end
4874

4975
describe "show" do

web/controllers/user_controller.ex

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ defmodule CodeCorps.UserController do
22
use CodeCorps.Web, :controller
33
use JaResource
44

5-
import CodeCorps.Helpers.Query, only: [id_filter: 2]
5+
import CodeCorps.Helpers.Query, only: [id_filter: 2, user_filter: 2, limit_filter: 2]
66

77
alias CodeCorps.User
88
alias CodeCorps.Services.UserService
@@ -15,6 +15,12 @@ defmodule CodeCorps.UserController do
1515
query |> id_filter(id_list)
1616
end
1717

18+
def handle_index(_conn, params) do
19+
User
20+
|> user_filter(params)
21+
|> limit_filter(params)
22+
end
23+
1824
def handle_create(_conn, attributes) do
1925
%User{} |> User.registration_changeset(attributes)
2026
end

0 commit comments

Comments
 (0)