- harden ammo context
- add user_id to ammo types
This commit is contained in:
		| @@ -4,32 +4,38 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do | ||||
|   """ | ||||
|  | ||||
|   use CanneryWeb, :live_component | ||||
|  | ||||
|   alias Cannery.{Ammo, Containers} | ||||
|   alias Cannery.{Ammo.AmmoType, Containers.Container} | ||||
|   alias Ecto.Changeset | ||||
|  | ||||
|   @impl true | ||||
|   def update(%{ammo_group: ammo_group} = assigns, socket) do | ||||
|     socket = socket |> assign(assigns) | ||||
|   def update(%{ammo_group: _ammo_group} = assigns, socket) do | ||||
|     socket |> assign(assigns) |> update() | ||||
|   end | ||||
|  | ||||
|   def update(%{assigns: %{ammo_group: ammo_group, current_user: current_user}} = socket) do | ||||
|     changeset = Ammo.change_ammo_group(ammo_group) | ||||
|     containers = Containers.list_containers(socket.assigns.current_user) | ||||
|     ammo_types = Ammo.list_ammo_types() | ||||
|  | ||||
|     containers = Containers.list_containers(current_user) | ||||
|     ammo_types = Ammo.list_ammo_types(current_user) | ||||
|     {:ok, socket |> assign(changeset: changeset, containers: containers, ammo_types: ammo_types)} | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
|   def handle_event("validate", %{"ammo_group" => ammo_group_params}, socket) do | ||||
|     ammo_group_params = ammo_group_params |> Map.put("user_id", socket.assigns.current_user.id) | ||||
|     changeset = socket.assigns.ammo_group |> Ammo.change_ammo_group(ammo_group_params) | ||||
|     {:noreply, socket |> assign(:changeset, changeset)} | ||||
|   def handle_event( | ||||
|         "validate", | ||||
|         %{"ammo_group" => ammo_group_params}, | ||||
|         %{assigns: %{ammo_group: ammo_group}} = socket | ||||
|       ) do | ||||
|     socket = socket |> assign(:changeset, ammo_group |> Ammo.change_ammo_group(ammo_group_params)) | ||||
|     {:noreply, socket} | ||||
|   end | ||||
|  | ||||
|   def handle_event("save", %{"ammo_group" => ammo_group_params}, socket) do | ||||
|     ammo_group_params = ammo_group_params |> Map.put("user_id", socket.assigns.current_user.id) | ||||
|     save_ammo_group(socket, socket.assigns.action, ammo_group_params) | ||||
|   def handle_event( | ||||
|         "save", | ||||
|         %{"ammo_group" => ammo_group_params}, | ||||
|         %{assigns: %{action: action}} = socket | ||||
|       ) do | ||||
|     save_ammo_group(socket, action, ammo_group_params) | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
| @@ -99,41 +105,50 @@ defmodule CanneryWeb.AmmoGroupLive.FormComponent do | ||||
|   # HTML Helpers | ||||
|   @spec container_options([Container.t()]) :: [{String.t(), Container.id()}] | ||||
|   defp container_options(containers) do | ||||
|     containers |> Enum.map(fn container -> {container.name, container.id} end) | ||||
|     containers |> Enum.map(fn %{id: id, name: name} -> {name, id} end) | ||||
|   end | ||||
|  | ||||
|   @spec ammo_type_options([AmmoType.t()]) :: [{String.t(), AmmoType.id()}] | ||||
|   defp ammo_type_options(ammo_types) do | ||||
|     ammo_types |> Enum.map(fn ammo_type -> {ammo_type.name, ammo_type.id} end) | ||||
|     ammo_types |> Enum.map(fn %{id: id, name: name} -> {name, id} end) | ||||
|   end | ||||
|  | ||||
|   # Save Helpers | ||||
|  | ||||
|   defp save_ammo_group(socket, :edit, ammo_group_params) do | ||||
|     socket.assigns.ammo_group | ||||
|     |> Ammo.update_ammo_group(ammo_group_params) | ||||
|     |> case do | ||||
|       {:ok, _ammo_group} -> | ||||
|         {:noreply, | ||||
|          socket | ||||
|          |> put_flash(:info, dgettext("prompts", "Ammo group updated successfully")) | ||||
|          |> push_redirect(to: socket.assigns.return_to)} | ||||
|   defp save_ammo_group( | ||||
|          %{assigns: %{ammo_group: ammo_group, current_user: current_user, return_to: return_to}} = | ||||
|            socket, | ||||
|          :edit, | ||||
|          ammo_group_params | ||||
|        ) do | ||||
|     socket = | ||||
|       case Ammo.update_ammo_group(ammo_group, ammo_group_params, current_user) do | ||||
|         {:ok, _ammo_group} -> | ||||
|           prompt = dgettext("prompts", "Ammo group updated successfully") | ||||
|           socket |> put_flash(:info, prompt) |> push_redirect(to: return_to) | ||||
|  | ||||
|       {:error, %Changeset{} = changeset} -> | ||||
|         {:noreply, socket |> assign(:changeset, changeset)} | ||||
|     end | ||||
|         {:error, %Changeset{} = changeset} -> | ||||
|           socket |> assign(:changeset, changeset) | ||||
|       end | ||||
|  | ||||
|     {:noreply, socket} | ||||
|   end | ||||
|  | ||||
|   defp save_ammo_group(socket, :new, ammo_group_params) do | ||||
|     case Ammo.create_ammo_group(ammo_group_params) do | ||||
|       {:ok, _ammo_group} -> | ||||
|         {:noreply, | ||||
|          socket | ||||
|          |> put_flash(:info, dgettext("prompts", "Ammo group created successfully")) | ||||
|          |> push_redirect(to: socket.assigns.return_to)} | ||||
|   defp save_ammo_group( | ||||
|          %{assigns: %{current_user: current_user, return_to: return_to}} = socket, | ||||
|          :new, | ||||
|          ammo_group_params | ||||
|        ) do | ||||
|     socket = | ||||
|       case Ammo.create_ammo_group(ammo_group_params, current_user) do | ||||
|         {:ok, _ammo_group} -> | ||||
|           prompt = dgettext("prompts", "Ammo group created successfully") | ||||
|           socket |> put_flash(:info, prompt) |> push_redirect(to: return_to) | ||||
|  | ||||
|       {:error, %Changeset{} = changeset} -> | ||||
|         {:noreply, socket |> assign(changeset: changeset)} | ||||
|     end | ||||
|         {:error, %Changeset{} = changeset} -> | ||||
|           socket |> assign(changeset: changeset) | ||||
|       end | ||||
|  | ||||
|     {:noreply, socket} | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -4,7 +4,6 @@ defmodule CanneryWeb.AmmoGroupLive.Index do | ||||
|   """ | ||||
|  | ||||
|   use CanneryWeb, :live_view | ||||
|  | ||||
|   alias Cannery.Ammo | ||||
|   alias Cannery.Ammo.AmmoGroup | ||||
|  | ||||
| @@ -14,14 +13,14 @@ defmodule CanneryWeb.AmmoGroupLive.Index do | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
|   def handle_params(params, _url, socket) do | ||||
|     {:noreply, apply_action(socket, socket.assigns.live_action, params)} | ||||
|   def handle_params(params, _url, %{assigns: %{live_action: live_action}} = socket) do | ||||
|     {:noreply, apply_action(socket, live_action, params)} | ||||
|   end | ||||
|  | ||||
|   defp apply_action(socket, :edit, %{"id" => id}) do | ||||
|   defp apply_action(%{assigns: %{current_user: current_user}} = socket, :edit, %{"id" => id}) do | ||||
|     socket | ||||
|     |> assign(:page_title, gettext("Edit Ammo group")) | ||||
|     |> assign(:ammo_group, Ammo.get_ammo_group!(id)) | ||||
|     |> assign(:ammo_group, Ammo.get_ammo_group!(id, current_user)) | ||||
|   end | ||||
|  | ||||
|   defp apply_action(socket, :new, _params) do | ||||
| @@ -31,19 +30,19 @@ defmodule CanneryWeb.AmmoGroupLive.Index do | ||||
|   end | ||||
|  | ||||
|   defp apply_action(socket, :index, _params) do | ||||
|     socket | ||||
|     |> assign(:page_title, gettext("Listing Ammo groups")) | ||||
|     |> assign(:ammo_group, nil) | ||||
|     socket |> assign(:page_title, gettext("Listing Ammo groups")) |> assign(:ammo_group, nil) | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
|   def handle_event("delete", %{"id" => id}, socket) do | ||||
|     Ammo.get_ammo_group!(id) |> Ammo.delete_ammo_group!() | ||||
|     {:noreply, socket |> display_ammo_groups()} | ||||
|   def handle_event("delete", %{"id" => id}, %{assigns: %{current_user: current_user}} = socket) do | ||||
|     Ammo.get_ammo_group!(id, current_user) |> Ammo.delete_ammo_group!(current_user) | ||||
|  | ||||
|     prompt = dgettext("prompts", "Ammo group deleted succesfully") | ||||
|  | ||||
|     {:noreply, socket |> put_flash(:info, prompt) |> display_ammo_groups()} | ||||
|   end | ||||
|  | ||||
|   defp display_ammo_groups(%{assigns: %{current_user: current_user}} = socket) do | ||||
|     ammo_groups = Ammo.list_ammo_groups(current_user) | ||||
|     socket |> assign(:ammo_groups, ammo_groups) | ||||
|     socket |> assign(:ammo_groups, Ammo.list_ammo_groups(current_user)) | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -9,27 +9,31 @@ defmodule CanneryWeb.AmmoGroupLive.Show do | ||||
|  | ||||
|   @impl true | ||||
|   def mount(_params, session, socket) do | ||||
|     socket = socket |> assign_defaults(session) | ||||
|  | ||||
|     {:ok, socket} | ||||
|     {:ok, socket |> assign_defaults(session)} | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
|   def handle_params(%{"id" => id}, _, socket) do | ||||
|     socket = | ||||
|       socket | ||||
|       |> assign( | ||||
|         page_title: page_title(socket.assigns.live_action), | ||||
|         ammo_group: Ammo.get_ammo_group!(id) |> Repo.preload([:container, :ammo_type]) | ||||
|       ) | ||||
|  | ||||
|     {:noreply, socket} | ||||
|   def handle_params( | ||||
|         %{"id" => id}, | ||||
|         _, | ||||
|         %{assigns: %{live_action: live_action, current_user: current_user}} = socket | ||||
|       ) do | ||||
|     ammo_group = Ammo.get_ammo_group!(id, current_user) |> Repo.preload([:container, :ammo_type]) | ||||
|     {:noreply, socket |> assign(page_title: page_title(live_action), ammo_group: ammo_group)} | ||||
|   end | ||||
|  | ||||
|   @impl true | ||||
|   def handle_event("delete", _, socket) do | ||||
|     socket.assigns.ammo_group |> Ammo.delete_ammo_group!() | ||||
|     {:noreply, socket |> push_redirect(to: Routes.ammo_group_index_path(socket, :index))} | ||||
|   def handle_event( | ||||
|         "delete", | ||||
|         _, | ||||
|         %{assigns: %{ammo_group: ammo_group, current_user: current_user}} = socket | ||||
|       ) do | ||||
|     ammo_group |> Ammo.delete_ammo_group!(current_user) | ||||
|  | ||||
|     prompt = dgettext("prompts", "Ammo group deleted succesfully") | ||||
|     redirect_to = Routes.ammo_group_index_path(socket, :index) | ||||
|  | ||||
|     {:noreply, socket |> put_flash(:info, prompt) |> push_redirect(to: redirect_to)} | ||||
|   end | ||||
|  | ||||
|   defp page_title(:show), do: gettext("Show Ammo group") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user