FallbackController for response

defmodule ScandimensionWeb.PersonController do
  use ScandimensionWeb, :controller

  import Ecto.Query, warn: false

  alias Scandimension.Repo
  alias Scandimension.Prospects
  alias Scandimension.Prospects.Person

  action_fallback ScandimensionWeb.FallbackController

  def index(conn, _params) do
    people = Prospects.list_people()
    render(conn, "index.json", people: people)
  end

  def create(conn, %{"person" => person_params}) do
    with {:ok, %Person{} = person} <- Prospects.create_person(person_params) do
      conn
      |> put_status(:created)
      |> put_resp_header("location", Routes.person_path(conn, :show, person))
      |> render("show.json", person: person)
    end
  end

  def show(conn, %{"id" => id}) do
    person = Prospects.get_person!(id)
    render(conn, "show.json", person: person)
  end

  def update(conn, %{"id" => id, "person" => person_params}) do
    person = Prospects.get_person!(id)

    with {:ok, %Person{} = person} <- Prospects.update_person(person, person_params) do
      render(conn, "show.json", person: person)
    end
  end

  def delete(conn, %{"id" => id}) do
    person = Prospects.get_person!(id)

    with {:ok, %Person{}} <- Prospects.delete_person(person) do
      send_resp(conn, :no_content, "")
    end
  end

  def fetch_person(conn, %{"email" => email, "event" => event }) do
    query = from "people", where: [email: ^email]

    if (Repo.exists?(query)) do
      person = Prospects.get_person_byEmail!(email)
      
      render(conn, "show.json", person: person)
    else
      temp = %{email: email, event: event}

      with {:ok, %Person{} = person} <- Prospects.create_person(temp) do
        conn
        |> put_status(:created)
        |> put_resp_header("location", Routes.person_path(conn, :show, person))
        |> render("show.json", person: person)
      end
    end

  end

end

FallbackController:

defmodule ScandimensionWeb.FallbackController do
  @moduledoc """
  Translates controller action results into valid `Plug.Conn` responses.

  See `Phoenix.Controller.action_fallback/1` for more details.
  """
  use ScandimensionWeb, :controller


  def call(conn, {:error, :not_found}) do
    conn
    |> put_status(:not_found)
    |> put_view(ScandimensionWeb.ErrorView)
    |> render(:"404")
  end

  def call(conn, {:error, %Ecto.Changeset{} = changeset}) do
    conn
    |> put_status(:unprocessable_entity)
    |> put_view(ScandimensionWeb.ChangesetView)
    |> render("error.json", changeset: changeset)
  end


end