lib/athena_web/admin/controllers/event_controller.ex

defmodule AthenaWeb.Admin.EventController do
  use AthenaWeb, :controller

  alias Athena.Inventory
  alias Athena.Inventory.Event

  def index(conn, _params) do
    events = Inventory.list_events()

    render(conn, "index.html", events: events)
  end

  def new(conn, _params) do
    changeset = Inventory.change_event(%Event{})
    render(conn, "new.html", changeset: changeset)
  end

  def create(conn, %{"event" => event_params}) do
    case Inventory.create_event(event_params) do
      {:ok, event} ->
        conn
        |> put_flash(:info, gettext("Event created successfully."))
        |> redirect(to: Routes.admin_event_path(conn, :show, event))

      {:error, %Ecto.Changeset{} = changeset} ->
        render(conn, "new.html", changeset: changeset)
    end
  end

  def show(conn, %{"id" => id}) do
    event = Inventory.get_event!(id)
    render_with_navigation(conn, event, "show.html", event: event)
  end

  def edit(conn, %{"id" => id}) do
    event = Inventory.get_event!(id)
    changeset = Inventory.change_event(event)
    render_with_navigation(conn, event, "edit.html", event: event, changeset: changeset)
  end

  def update(conn, %{"id" => id, "event" => event_params}) do
    event = Inventory.get_event!(id)

    case Inventory.update_event(event, event_params) do
      {:ok, event} ->
        conn
        |> put_flash(:info, gettext("Event updated successfully."))
        |> redirect(to: Routes.admin_event_path(conn, :show, event))

      {:error, %Ecto.Changeset{} = changeset} ->
        render_with_navigation(conn, event, "edit.html", event: event, changeset: changeset)
    end
  end

  def delete(conn, %{"id" => id}) do
    event = Inventory.get_event!(id)
    {:ok, _event} = Inventory.delete_event(event)

    conn
    |> put_flash(:info, gettext("Event deleted successfully."))
    |> redirect(to: Routes.admin_event_path(conn, :index))
  end
end