[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:
Joao P Dubas 2021-06-26 18:08:29 +00:00
parent 5c2c588cca
commit da77d81200
2 changed files with 16 additions and 2 deletions

View File

@ -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

View File

@ -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