[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
|
||||
alias Wabanex.{Repo, User}
|
||||
import Ecto.Query
|
||||
|
||||
alias Wabanex.{Repo, Training, User}
|
||||
|
||||
def call(id) do
|
||||
id
|
||||
@ -14,7 +16,18 @@ defmodule Wabanex.Users.Get do
|
||||
|> Repo.get(uuid)
|
||||
|> case do
|
||||
nil -> {:error, "User not found"}
|
||||
user -> {:ok, user}
|
||||
user -> {:ok, load_training(user)}
|
||||
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
|
||||
|
@ -6,6 +6,7 @@ defmodule WabanexWeb.Schema.Types.User do
|
||||
field :id, non_null(:uuid4)
|
||||
field :name, non_null(:string)
|
||||
field :email, non_null(:string)
|
||||
field :trainings, list_of(:training)
|
||||
end
|
||||
|
||||
input_object :create_user_input do
|
||||
|
Loading…
x
Reference in New Issue
Block a user