defmodule PhilomenaWeb.Profile.Commission.ItemController do use PhilomenaWeb, :controller alias Philomena.Commissions.Item alias Philomena.Commissions alias Philomena.Users.User alias Philomena.Repo plug PhilomenaWeb.FilterBannedUsersPlug plug :load_resource, model: User, id_name: "profile_id", id_field: "slug", preload: [ :verified_links, commission: [ sheet_image: [:sources, tags: :aliases], user: [awards: :badge], items: [example_image: [:sources, tags: :aliases]] ] ], persisted: true plug :ensure_commission plug :ensure_correct_user def new(conn, _params) do user = conn.assigns.user commission = user.commission changeset = Commissions.change_item(%Item{}) render(conn, "new.html", title: "New Commission Item", user: user, commission: commission, changeset: changeset ) end def create(conn, %{"item" => item_params}) do user = conn.assigns.user commission = user.commission case Commissions.create_item(commission, item_params) do {:ok, _multi} -> conn |> put_flash(:info, "Item successfully created.") |> redirect(to: ~p"/profiles/#{conn.assigns.user}/commission") {:error, changeset} -> render(conn, "new.html", user: user, commission: commission, changeset: changeset) end end def edit(conn, %{"id" => id}) do user = conn.assigns.user commission = user.commission item = Repo.get_by!(Item, commission_id: commission.id, id: id) changeset = Commissions.change_item(item) render(conn, "edit.html", title: "Editing Commission Item", user: user, commission: commission, item: item, changeset: changeset ) end def update(conn, %{"id" => id, "item" => item_params}) do user = conn.assigns.user commission = user.commission item = Repo.get_by!(Item, commission_id: commission.id, id: id) case Commissions.update_item(item, item_params) do {:ok, _commission} -> conn |> put_flash(:info, "Item successfully updated.") |> redirect(to: ~p"/profiles/#{conn.assigns.user}/commission") {:error, changeset} -> render(conn, "edit.html", user: user, commission: commission, item: item, changeset: changeset ) end end def delete(conn, %{"id" => id}) do user = conn.assigns.user commission = user.commission item = Repo.get_by!(Item, commission_id: commission.id, id: id) {:ok, _multi} = Commissions.delete_item(item) conn |> put_flash(:info, "Item successfully deleted.") |> redirect(to: ~p"/profiles/#{conn.assigns.user}/commission") end defp ensure_commission(conn, _opts) do case is_nil(conn.assigns.user.commission) do true -> PhilomenaWeb.NotFoundPlug.call(conn) false -> conn end end defp ensure_correct_user(conn, _opts) do user_id = conn.assigns.user.id case conn.assigns.current_user do %{id: ^user_id} -> conn _other -> PhilomenaWeb.NotAuthorizedPlug.call(conn) end end end