Skip to content

Commit c75ee07

Browse files
committed
Refactored with Andrew's amazing Elixir skillz
1 parent 34ba3ad commit c75ee07

File tree

3 files changed

+31
-44
lines changed

3 files changed

+31
-44
lines changed

web/controllers/organization_membership_controller.ex

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,15 @@
11
defmodule CodeCorps.OrganizationMembershipController do
22
use CodeCorps.Web, :controller
33

4-
import CodeCorps.ControllerHelpers
5-
64
alias JaSerializer.Params
75
alias CodeCorps.OrganizationMembership
86

97
plug :scrub_params, "data" when action in [:create, :update]
108

119
def index(conn, params) do
1210
memberships =
13-
case params do
14-
%{"organization_id" => organization_id, "role" => roles, "filter" => id_list} ->
15-
roles = roles |> coalesce_string
16-
ids = id_list |> coalesce_id_string
17-
OrganizationMembership
18-
|> where([om], om.organization_id == ^organization_id)
19-
|> where([om], om.member_id in ^ids)
20-
|> where([om], om.role in ^roles)
21-
%{"organization_id" => organization_id, "role" => roles} ->
22-
roles = roles |> coalesce_string
23-
OrganizationMembership
24-
|> where([om], om.organization_id == ^organization_id)
25-
|> where([om], om.role in ^roles)
26-
%{"organization_id" => organization_id, "filter" => id_list} ->
27-
id_list = id_list |> coalesce_id_string
28-
OrganizationMembership
29-
|> where([om], om.organization_id == ^organization_id)
30-
|> where([om], om.id in ^id_list)
31-
%{"role" => roles, "filter" => id_list} ->
32-
roles = roles |> coalesce_string
33-
ids = id_list |> coalesce_id_string
34-
OrganizationMembership
35-
|> where([om], om.member_id in ^ids)
36-
|> where([om], om.role in ^roles)
37-
%{"organization_id" => organization_id} ->
38-
OrganizationMembership
39-
|> where([om], om.organization_id == ^organization_id)
40-
%{"filter" => id_list} ->
41-
ids = id_list |> coalesce_id_string
42-
OrganizationMembership
43-
|> where([om], om.member_id in ^ids)
44-
%{"role" => roles} ->
45-
roles = roles |> coalesce_string
46-
OrganizationMembership
47-
|> where([om], om.role in ^roles)
48-
_ ->
49-
OrganizationMembership
50-
end
51-
52-
memberships =
53-
memberships
11+
OrganizationMembership
12+
|> OrganizationMembership.add_filters(params)
5413
|> preload([:organization, :member])
5514
|> Repo.all
5615

web/models/model_helpers.ex

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
defmodule CodeCorps.ModelHelpers do
2-
import Ecto.Changeset
2+
use CodeCorps.Web, :model
3+
4+
import CodeCorps.ControllerHelpers
35

46
def generate_slug(changeset, value_key, slug_key) do
57
case changeset do
@@ -10,4 +12,21 @@ defmodule CodeCorps.ModelHelpers do
1012
changeset
1113
end
1214
end
15+
16+
def member_filter(query, %{"filter" => id_list}) do
17+
ids = id_list |> coalesce_id_string
18+
query |> where([om], om.member_id in ^ids)
19+
end
20+
def member_filter(query, _), do: query
21+
22+
def organization_filter(query, %{"organization_id" => organization_id}) do
23+
query |> where([om], om.organization_id == ^organization_id)
24+
end
25+
def organization_filter(query, _), do: query
26+
27+
def role_filter(query, %{"role" => roles}) do
28+
roles = roles |> coalesce_string
29+
query |> where([om], om.role in ^roles)
30+
end
31+
def role_filter(query, _), do: query
1332
end

web/models/organization_membership.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ defmodule CodeCorps.OrganizationMembership do
55

66
use CodeCorps.Web, :model
77

8+
import CodeCorps.ModelHelpers
9+
810
alias CodeCorps.Organization
911
alias CodeCorps.User
1012

@@ -47,6 +49,13 @@ defmodule CodeCorps.OrganizationMembership do
4749
|> changeset(params)
4850
end
4951

52+
def add_filters(query, params) do
53+
query
54+
|> organization_filter(params)
55+
|> role_filter(params)
56+
|> member_filter(params)
57+
end
58+
5059
defp roles do
5160
~w{ pending contributor admin owner }
5261
end

0 commit comments

Comments
 (0)