Skip to content

Commit fe31d40

Browse files
authored
Move preloading to API controllers (#43)
1 parent dfd50af commit fe31d40

18 files changed

+351
-323
lines changed

lib/swapi/films.ex

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,26 @@ defmodule SWAPI.Films do
2222
[%Film{}, ...]
2323
2424
"""
25-
def list_films do
26-
Film
27-
|> Repo.all()
28-
|> preload_all()
29-
end
25+
def list_films, do: Repo.all(Film)
3026

31-
def list_films(params) do
32-
with {:ok, {films, meta}} <- paginate(Film, params) do
33-
{:ok, {preload_all(films), meta}}
34-
end
27+
def list_films(params), do: paginate(Film, params)
28+
29+
def search_films(terms) do
30+
terms
31+
|> Enum.reduce(Film, fn term, query ->
32+
query
33+
|> where([f], like(f.title, ^"%#{term}%"))
34+
end)
35+
|> Repo.all()
3536
end
3637

3738
def search_films(terms, params) do
38-
films =
39-
Enum.reduce(terms, Film, fn term, query ->
40-
query
41-
|> where([f], like(f.title, ^"%#{term}%"))
42-
end)
43-
44-
with {:ok, {films, meta}} <- paginate(films, params) do
45-
{:ok, {preload_all(films), meta}}
46-
end
39+
terms
40+
|> Enum.reduce(Film, fn term, query ->
41+
query
42+
|> where([f], like(f.title, ^"%#{term}%"))
43+
end)
44+
|> paginate(params)
4745
end
4846

4947
@doc """
@@ -60,16 +58,12 @@ defmodule SWAPI.Films do
6058
** (Ecto.NoResultsError)
6159
6260
"""
63-
def get_film!(id) do
64-
Film
65-
|> Repo.get!(id)
66-
|> preload_all()
67-
end
61+
def get_film!(id), do: Repo.get!(Film, id)
6862

6963
def get_film(id) do
7064
case Repo.get(Film, id) do
7165
%Film{} = film ->
72-
{:ok, preload_all(film)}
66+
{:ok, film}
7367

7468
_ ->
7569
{:error, :not_found}

lib/swapi/people.ex

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,26 @@ defmodule SWAPI.People do
2222
[%Person{}, ...]
2323
2424
"""
25-
def list_people do
26-
Person
27-
|> Repo.all()
28-
|> preload_all()
29-
end
25+
def list_people, do: Repo.all(Person)
3026

31-
def list_people(params) do
32-
with {:ok, {people, meta}} <- paginate(Person, params) do
33-
{:ok, {preload_all(people), meta}}
34-
end
27+
def list_people(params), do: paginate(Person, params)
28+
29+
def search_people(terms) do
30+
terms
31+
|> Enum.reduce(Person, fn term, query ->
32+
query
33+
|> where([p], like(p.name, ^"%#{term}%"))
34+
end)
35+
|> Repo.all()
3536
end
3637

3738
def search_people(terms, params) do
38-
people =
39-
Enum.reduce(terms, Person, fn term, query ->
40-
query
41-
|> where([p], like(p.name, ^"%#{term}%"))
42-
end)
43-
44-
with {:ok, {people, meta}} <- paginate(people, params) do
45-
{:ok, {preload_all(people), meta}}
46-
end
39+
terms
40+
|> Enum.reduce(Person, fn term, query ->
41+
query
42+
|> where([p], like(p.name, ^"%#{term}%"))
43+
end)
44+
|> paginate(params)
4745
end
4846

4947
@doc """
@@ -60,16 +58,12 @@ defmodule SWAPI.People do
6058
** (Ecto.NoResultsError)
6159
6260
"""
63-
def get_person!(id) do
64-
Person
65-
|> Repo.get!(id)
66-
|> preload_all()
67-
end
61+
def get_person!(id), do: Repo.get!(Person, id)
6862

6963
def get_person(id) do
7064
case Repo.get(Person, id) do
7165
%Person{} = person ->
72-
{:ok, preload_all(person)}
66+
{:ok, person}
7367

7468
_ ->
7569
{:error, :not_found}

lib/swapi/planets.ex

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,26 @@ defmodule SWAPI.Planets do
2222
[%Planet{}, ...]
2323
2424
"""
25-
def list_planets do
26-
Planet
27-
|> Repo.all()
28-
|> preload_all()
29-
end
25+
def list_planets, do: Repo.all(Planet)
3026

31-
def list_planets(params) do
32-
with {:ok, {planets, meta}} <- paginate(Planet, params) do
33-
{:ok, {preload_all(planets), meta}}
34-
end
27+
def list_planets(params), do: paginate(Planet, params)
28+
29+
def search_planets(terms) do
30+
terms
31+
|> Enum.reduce(Planet, fn term, query ->
32+
query
33+
|> where([p], like(p.name, ^"%#{term}%"))
34+
end)
35+
|> Repo.all()
3536
end
3637

3738
def search_planets(terms, params) do
38-
planets =
39-
Enum.reduce(terms, Planet, fn term, query ->
40-
query
41-
|> where([p], like(p.name, ^"%#{term}%"))
42-
end)
43-
44-
with {:ok, {planets, meta}} <- paginate(planets, params) do
45-
{:ok, {preload_all(planets), meta}}
46-
end
39+
terms
40+
|> Enum.reduce(Planet, fn term, query ->
41+
query
42+
|> where([p], like(p.name, ^"%#{term}%"))
43+
end)
44+
|> paginate(params)
4745
end
4846

4947
@doc """
@@ -60,16 +58,12 @@ defmodule SWAPI.Planets do
6058
** (Ecto.NoResultsError)
6159
6260
"""
63-
def get_planet!(id) do
64-
Planet
65-
|> Repo.get!(id)
66-
|> preload_all()
67-
end
61+
def get_planet!(id), do: Repo.get!(Planet, id)
6862

6963
def get_planet(id) do
7064
case Repo.get(Planet, id) do
7165
%Planet{} = planet ->
72-
{:ok, preload_all(planet)}
66+
{:ok, planet}
7367

7468
_ ->
7569
{:error, :not_found}

lib/swapi/species.ex

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,26 @@ defmodule SWAPI.Species do
2222
[%Species{}, ...]
2323
2424
"""
25-
def list_species do
26-
Species
27-
|> Repo.all()
28-
|> preload_all()
29-
end
25+
def list_species, do: Repo.all(Species)
3026

31-
def list_species(params) do
32-
with {:ok, {species, meta}} <- paginate(Species, params) do
33-
{:ok, {preload_all(species), meta}}
34-
end
27+
def list_species(params), do: paginate(Species, params)
28+
29+
def search_species(terms) do
30+
terms
31+
|> Enum.reduce(Species, fn term, query ->
32+
query
33+
|> where([s], like(s.name, ^"%#{term}%"))
34+
end)
35+
|> Repo.all()
3536
end
3637

3738
def search_species(terms, params) do
38-
species =
39-
Enum.reduce(terms, Species, fn term, query ->
40-
query
41-
|> where([s], like(s.name, ^"%#{term}%"))
42-
end)
43-
44-
with {:ok, {species, meta}} <- paginate(species, params) do
45-
{:ok, {preload_all(species), meta}}
46-
end
39+
terms
40+
|> Enum.reduce(Species, fn term, query ->
41+
query
42+
|> where([s], like(s.name, ^"%#{term}%"))
43+
end)
44+
|> paginate(params)
4745
end
4846

4947
@doc """
@@ -60,16 +58,12 @@ defmodule SWAPI.Species do
6058
** (Ecto.NoResultsError)
6159
6260
"""
63-
def get_species!(id) do
64-
Species
65-
|> Repo.get!(id)
66-
|> preload_all()
67-
end
61+
def get_species!(id), do: Repo.get!(Species, id)
6862

6963
def get_species(id) do
7064
case Repo.get(Species, id) do
7165
%Species{} = species ->
72-
{:ok, preload_all(species)}
66+
{:ok, species}
7367

7468
_ ->
7569
{:error, :not_found}

lib/swapi/starships.ex

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,32 +23,34 @@ defmodule SWAPI.Starships do
2323
[%Starship{}, ...]
2424
2525
"""
26-
def list_starships do
27-
Starship
28-
|> Repo.all()
29-
|> preload_all()
30-
end
26+
def list_starships, do: Repo.all(Starship)
3127

32-
def list_starships(params) do
33-
with {:ok, {starships, meta}} <- paginate(Starship, params) do
34-
{:ok, {preload_all(starships), meta}}
35-
end
28+
def list_starships(params), do: paginate(Starship, params)
29+
30+
def search_starships(terms) do
31+
query =
32+
Starship
33+
|> join(:left, [s], t in Transport, on: s.id == t.id)
34+
35+
terms
36+
|> Enum.reduce(query, fn term, query ->
37+
query
38+
|> where([s, t], like(t.name, ^"%#{term}%") or like(t.model, ^"%#{term}%"))
39+
end)
40+
|> Repo.all()
3641
end
3742

3843
def search_starships(terms, params) do
3944
query =
4045
Starship
4146
|> join(:left, [s], t in Transport, on: s.id == t.id)
4247

43-
starships =
44-
Enum.reduce(terms, query, fn term, query ->
45-
query
46-
|> where([s, t], like(t.name, ^"%#{term}%") or like(t.model, ^"%#{term}%"))
47-
end)
48-
49-
with {:ok, {starships, meta}} <- paginate(starships, params) do
50-
{:ok, {preload_all(starships), meta}}
51-
end
48+
terms
49+
|> Enum.reduce(query, fn term, query ->
50+
query
51+
|> where([s, t], like(t.name, ^"%#{term}%") or like(t.model, ^"%#{term}%"))
52+
end)
53+
|> paginate(params)
5254
end
5355

5456
@doc """
@@ -65,16 +67,12 @@ defmodule SWAPI.Starships do
6567
** (Ecto.NoResultsError)
6668
6769
"""
68-
def get_starship!(id) do
69-
Starship
70-
|> Repo.get!(id)
71-
|> preload_all()
72-
end
70+
def get_starship!(id), do: Repo.get!(Starship, id)
7371

7472
def get_starship(id) do
7573
case Repo.get(Starship, id) do
7674
%Starship{} = starship ->
77-
{:ok, preload_all(starship)}
75+
{:ok, starship}
7876

7977
_ ->
8078
{:error, :not_found}

lib/swapi/vehicles.ex

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,32 +23,34 @@ defmodule SWAPI.Vehicles do
2323
[%Vehicle{}, ...]
2424
2525
"""
26-
def list_vehicles do
27-
Vehicle
28-
|> Repo.all()
29-
|> preload_all()
30-
end
26+
def list_vehicles, do: Repo.all(Vehicle)
3127

32-
def list_vehicles(params) do
33-
with {:ok, {vehicles, meta}} <- paginate(Vehicle, params) do
34-
{:ok, {preload_all(vehicles), meta}}
35-
end
28+
def list_vehicles(params), do: paginate(Vehicle, params)
29+
30+
def search_vehicles(terms) do
31+
query =
32+
Vehicle
33+
|> join(:left, [v], t in Transport, on: v.id == t.id)
34+
35+
terms
36+
|> Enum.reduce(query, fn term, query ->
37+
query
38+
|> where([v, t], like(t.name, ^"%#{term}%") or like(t.model, ^"%#{term}%"))
39+
end)
40+
|> Repo.all()
3641
end
3742

3843
def search_vehicles(terms, params) do
3944
query =
4045
Vehicle
4146
|> join(:left, [v], t in Transport, on: v.id == t.id)
4247

43-
vehicles =
44-
Enum.reduce(terms, query, fn term, query ->
45-
query
46-
|> where([v, t], like(t.name, ^"%#{term}%") or like(t.model, ^"%#{term}%"))
47-
end)
48-
49-
with {:ok, {vehicles, meta}} <- paginate(vehicles, params) do
50-
{:ok, {preload_all(vehicles), meta}}
51-
end
48+
terms
49+
|> Enum.reduce(query, fn term, query ->
50+
query
51+
|> where([v, t], like(t.name, ^"%#{term}%") or like(t.model, ^"%#{term}%"))
52+
end)
53+
|> paginate(params)
5254
end
5355

5456
@doc """
@@ -65,16 +67,12 @@ defmodule SWAPI.Vehicles do
6567
** (Ecto.NoResultsError)
6668
6769
"""
68-
def get_vehicle!(id) do
69-
Vehicle
70-
|> Repo.get!(id)
71-
|> preload_all()
72-
end
70+
def get_vehicle!(id), do: Repo.get!(Vehicle, id)
7371

7472
def get_vehicle(id) do
7573
case Repo.get(Vehicle, id) do
7674
%Vehicle{} = vehicle ->
77-
{:ok, preload_all(vehicle)}
75+
{:ok, vehicle}
7876

7977
_ ->
8078
{:error, :not_found}

0 commit comments

Comments
 (0)