Strange `CaseClauseError`

@benwilson512 thanks for the response!
I tried removing the ! at both get_user_by_email and get_by.
I also tried refactoring the SessionController to:

case Library.get_user_by_email(email) do
   {user} ->
      conn
      |> put_view(LibraryApiWeb.SessionView)
      |> render("token.json", user: user)
   {nil} ->
      conn
      |> put_status(:unauthorized)
      |> put_view(LibraryApiWeb.ErrorView)
      |> render("401.json-api", %{detail: "Error logging in a user with that email and password"})
   {:error, _reason} ->
      conn
      |> put_status(:unauthorized)
      |> put_view(LibraryApiWeb.ErrorView)
      |> render("401.json-api", %{detail: "Error logging in a user with that email and password"})
end

but the following error bugged me:

iex(1)> [info] POST /api/session
iex(1)> [debug] Processing with LibraryApiWeb.SessionController.create/2
  Parameters: %{"email" => "maria@hello.com", "password" => "[FILTERED]"}
  Pipelines: [:api]
iex(1)> [debug] QUERY OK source="users" db=0.0ms
SELECT u0."id", u0."email", u0."password_hash", u0."username", u0."inserted_at", u0."updated_at" FROM "users" AS u0 WHERE (u0."email" = $1) ["maria@hello.com"]
iex(1)> [info] Converted error {:case_clause, %LibraryApi.Library.User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">, email: "maria@hello.com", id: 4, inserted_at: ~N[2019-05-12 08:41:18], password: nil, password_confirmation: nil, password_hash: "$2b$12$7qHpuOzPJaJShZoO4DCmAe9K/vHvsGwGPRlVmGzHQUlLkCBpgOZ82", updated_at: ~N[2019-05-12 08:41:18], username: "maria"}} to 500 response
iex(1)> [info] Sent 500 in 78ms
iex(1)> [error] #PID<0.451.0> running LibraryApiWeb.Endpoint (connection #PID<0.450.0>, stream id 1) terminated
Server: localhost:4000 (http)
Request: POST /api/session
** (exit) an exception was raised:
    ** (CaseClauseError) no case clause matching: %LibraryApi.Library.User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">, email: "maria@hello.com", id: 4, inserted_at: ~N[2019-05-12 08:41:18], password: nil, password_confirmation: nil, password_hash: "$2b$12$7qHpuOzPJaJShZoO4DCmAe9K/vHvsGwGPRlVmGzHQUlLkCBpgOZ82", updated_at: ~N[2019-05-12 08:41:18], username: "maria"}
        (library_api) lib/library_api_web/controllers/session_controller.ex:7: LibraryApiWeb.SessionController.create/2
        (library_api) lib/library_api_web/controllers/session_controller.ex:1: LibraryApiWeb.SessionController.action/2
        (library_api) lib/library_api_web/controllers/session_controller.ex:1: LibraryApiWeb.SessionController.phoenix_controller_pipeline/2
        (library_api) lib/library_api_web/endpoint.ex:1: LibraryApiWeb.Endpoint.instrument/4
        (phoenix) lib/phoenix/router.ex:275: Phoenix.Router.__call__/1
        (library_api) lib/library_api_web/endpoint.ex:1: LibraryApiWeb.Endpoint.plug_builder_call/2
        (library_api) lib/library_api_web/endpoint.ex:1: LibraryApiWeb.Endpoint.call/2
        (phoenix) lib/phoenix/endpoint/cowboy2_handler.ex:33: Phoenix.Endpoint.Cowboy2Handler.init/2
        (cowboy) d:/@@@/@gilbertc77/library_api/deps/cowboy/src/cowboy_handler.erl:41: :cowboy_handler.execute/2
        (cowboy) d:/@@@/@gilbertc77/library_api/deps/cowboy/src/cowboy_stream_h.erl:296: :cowboy_stream_h.execute/3
        (cowboy) d:/@@@/@gilbertc77/library_api/deps/cowboy/src/cowboy_stream_h.erl:274: :cowboy_stream_h.request_process/3

        (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3

There is a line in that iex console dump that catches my eye

iex(1)> [info] Converted error {:case_clause, %LibraryApi.Library.User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">, email: "maria@hello.com", id: 4, inserted_at: ~N[2019-05-12 08:41:18], password: nil, password_confirmation: nil, password_hash: "$2b$12$7qHpuOzPJaJShZoO4DCmAe9K/vHvsGwGPRlVmGzHQUlLkCBpgOZ82", updated_at: ~N[2019-05-12 08:41:18], username: "maria"}} to 500 response

What does Converted error mean?

Also there was a warning before that:

warning: this clause cannot match because a previous clause at line 8 always matches
  lib/library_api_web/controllers/session_controller.ex:12