2021-06-22 23:57:10 +00:00
|
|
|
defmodule Wabanex.Users.Get do
|
2021-06-26 18:08:29 +00:00
|
|
|
import Ecto.Query
|
|
|
|
|
|
|
|
alias Wabanex.{Repo, Training, User}
|
2021-06-22 23:57:10 +00:00
|
|
|
|
|
|
|
def call(id) do
|
|
|
|
id
|
|
|
|
|> Ecto.UUID.cast()
|
|
|
|
|> handle_result()
|
|
|
|
end
|
|
|
|
|
|
|
|
defp handle_result(:error), do: {:error, "Invalid id format"}
|
|
|
|
|
|
|
|
defp handle_result({:ok, uuid}) do
|
|
|
|
User
|
|
|
|
|> Repo.get(uuid)
|
|
|
|
|> case do
|
|
|
|
nil -> {:error, "User not found"}
|
2021-06-26 18:08:29 +00:00
|
|
|
user -> {:ok, load_training(user)}
|
2021-06-22 23:57:10 +00:00
|
|
|
end
|
|
|
|
end
|
2021-06-26 18:08:29 +00:00
|
|
|
|
|
|
|
defp load_training(%User{} = user) do
|
|
|
|
today = Date.utc_today()
|
|
|
|
|
|
|
|
query =
|
|
|
|
from(t in Training,
|
2021-06-28 00:26:04 +00:00
|
|
|
where: fragment("?::date <@ ?", ^today, t.period)
|
2021-06-26 18:08:29 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
Repo.preload(user, trainings: {first(query, :inserted_at), :exercises})
|
|
|
|
end
|
2021-06-22 23:57:10 +00:00
|
|
|
end
|