defmodule Wabanex.Users.Get do import Ecto.Query alias Wabanex.{Repo, Training, User} 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"} 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