[day-05] preload training alongside user
Preload training and exercises when fetching an user and expose this information in graphql.
This commit is contained in:
parent
5c2c588cca
commit
da77d81200
@ -1,5 +1,7 @@
|
|||||||
defmodule Wabanex.Users.Get do
|
defmodule Wabanex.Users.Get do
|
||||||
alias Wabanex.{Repo, User}
|
import Ecto.Query
|
||||||
|
|
||||||
|
alias Wabanex.{Repo, Training, User}
|
||||||
|
|
||||||
def call(id) do
|
def call(id) do
|
||||||
id
|
id
|
||||||
@ -14,7 +16,18 @@ defmodule Wabanex.Users.Get do
|
|||||||
|> Repo.get(uuid)
|
|> Repo.get(uuid)
|
||||||
|> case do
|
|> case do
|
||||||
nil -> {:error, "User not found"}
|
nil -> {:error, "User not found"}
|
||||||
user -> {:ok, user}
|
user -> {:ok, load_training(user)}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp load_training(%User{} = user) do
|
||||||
|
today = Date.utc_today()
|
||||||
|
|
||||||
|
query =
|
||||||
|
from(t in Training,
|
||||||
|
where: ^today >= t.start_date and ^today <= t.end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
Repo.preload(user, trainings: {first(query, :inserted_at), :exercises})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -6,6 +6,7 @@ defmodule WabanexWeb.Schema.Types.User do
|
|||||||
field :id, non_null(:uuid4)
|
field :id, non_null(:uuid4)
|
||||||
field :name, non_null(:string)
|
field :name, non_null(:string)
|
||||||
field :email, non_null(:string)
|
field :email, non_null(:string)
|
||||||
|
field :trainings, list_of(:training)
|
||||||
end
|
end
|
||||||
|
|
||||||
input_object :create_user_input do
|
input_object :create_user_input do
|
||||||
|
Loading…
x
Reference in New Issue
Block a user