move helpers to shops.ex, update controller
controller now uses helpers from shops.ex (same as live), and no longer has edit/delete/create functionality
This commit is contained in:
		
							parent
							
								
									9e1118868a
								
							
						
					
					
						commit
						c30f6068db
					
				| @ -127,4 +127,50 @@ defmodule PokemonCouture.Shops do | ||||
|     |> Ecto.Changeset.put_assoc(:users, List.delete(clothes.users, user)) | ||||
|     |> Repo.update!() | ||||
|   end | ||||
| 
 | ||||
|   @doc """ | ||||
|   Creates a a shop map. | ||||
|   %{location -> %{type -> [clothes_of_loc_and_type]}} | ||||
|   """ | ||||
|   def create_shop_map() do | ||||
|     Enum.reduce(list_clothes_with_owners(), %{}, &sort_clothes_to_map/2) | ||||
|   end | ||||
| 
 | ||||
|   defp sort_clothes_to_map(clothes, map) do | ||||
|     case map[clothes.location] do | ||||
|       nil -> | ||||
|         Map.put(map, clothes.location, %{clothes.type => [clothes]}) | ||||
|       map_of_clothes when is_map(map_of_clothes) -> | ||||
|         map_of_clothes = case map_of_clothes[clothes.type] do | ||||
|           nil -> | ||||
|             Map.put(map_of_clothes, clothes.type, [clothes]) | ||||
|           list_of_clothes when is_list(list_of_clothes) -> | ||||
|             Map.put(map_of_clothes, clothes.type, [clothes | list_of_clothes]) | ||||
|         end | ||||
|         Map.put(map, clothes.location, map_of_clothes) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   defp assign_clothespiece_to_map(clothes, map) do | ||||
|     case map[clothes.name] do | ||||
|       nil -> | ||||
|         Map.put(map, clothes.name, [clothes]) | ||||
|       list_of_clothes when is_list(list_of_clothes) -> | ||||
|         Map.put(map, clothes.name, [clothes | list_of_clothes]) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   @doc """ | ||||
|   Sorts inner maps created with create_shop_map(), | ||||
|   putting each in a different map by clothes name, then sorting by game name. | ||||
|   Resulting big map: %{location -> %{type -> %{name -> sorted_list_of_clothes}}} | ||||
|   """ | ||||
|   def inner_map_creator({type, list}, acc) do | ||||
|     clothes_map = Enum.reduce(list, %{}, &assign_clothespiece_to_map/2) | ||||
|     clothes_map = for {shop, map} <- clothes_map | ||||
|                    do {shop, Enum.sort_by(map, fn %Clothes{game: game} -> game end)} | ||||
|                   end | ||||
|     Map.put(acc, type, clothes_map) | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  | ||||
| @ -3,71 +3,16 @@ defmodule PokemonCoutureWeb.ClothesController do | ||||
| 
 | ||||
|   alias PokemonCouture.Shops | ||||
| 
 | ||||
|   def create_shop_map(clothes, map) do # helper function for index | ||||
|     case map[clothes.location] do | ||||
|       nil -> | ||||
|         Map.put(map, clothes.location, [clothes]) | ||||
|       list_of_clothes when is_list(list_of_clothes) -> | ||||
|         Map.put(map, clothes.location, list_of_clothes ++ [clothes]) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def index(conn, _params) do | ||||
|     clothes = Shops.list_clothes() | ||||
|     clothes_map = | ||||
|       clothes | ||||
|       |> Enum.reduce(%{}, &create_shop_map/2) | ||||
|     render(conn, "index.html", clothes: clothes, clothes_map: clothes_map) | ||||
|     clothes_map = Shops.create_shop_map() | ||||
|     clothes_map = for {shop, map} <- clothes_map | ||||
|                     do {shop, Enum.reduce(map, %{}, &Shops.inner_map_creator/2)} | ||||
|                   end | ||||
|     render(conn, "index.html", clothes_map: clothes_map) | ||||
|   end | ||||
| 
 | ||||
|   # def new(conn, _params) do | ||||
|   #   changeset = Shops.change_clothes(%Clothes{}) | ||||
|   #   render(conn, "new.html", changeset: changeset) | ||||
|   # end | ||||
| 
 | ||||
|   # def create(conn, %{"clothes" => clothes_params}) do | ||||
|   #   case Shops.create_clothes(clothes_params) do | ||||
|   #     {:ok, clothes} -> | ||||
|   #       conn | ||||
|   #       |> put_flash(:info, "Clothes created successfully.") | ||||
|   #       |> redirect(to: Routes.clothes_path(conn, :show, clothes)) | ||||
| 
 | ||||
|   #     {:error, %Ecto.Changeset{} = changeset} -> | ||||
|   #       render(conn, "new.html", changeset: changeset) | ||||
|   #   end | ||||
|   # end | ||||
| 
 | ||||
|   def show(conn, %{"id" => id}) do | ||||
|     clothes = Shops.get_clothes!(id) | ||||
|     render(conn, "show.html", clothes: clothes) | ||||
|   end | ||||
| 
 | ||||
|   def edit(conn, %{"id" => id}) do | ||||
|     clothes = Shops.get_clothes!(id) | ||||
|     changeset = Shops.change_clothes(clothes) | ||||
|     render(conn, "edit.html", clothes: clothes, changeset: changeset) | ||||
|   end | ||||
| 
 | ||||
|   def update(conn, %{"id" => id, "clothes" => clothes_params}) do | ||||
|     clothes = Shops.get_clothes!(id) | ||||
| 
 | ||||
|     case Shops.update_clothes(clothes, clothes_params) do | ||||
|       {:ok, clothes} -> | ||||
|         conn | ||||
|         |> put_flash(:info, "Clothes updated successfully.") | ||||
|         |> redirect(to: Routes.clothes_path(conn, :show, clothes)) | ||||
| 
 | ||||
|       {:error, %Ecto.Changeset{} = changeset} -> | ||||
|         render(conn, "edit.html", clothes: clothes, changeset: changeset) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def delete(conn, %{"id" => id}) do | ||||
|     clothes = Shops.get_clothes!(id) | ||||
|     {:ok, _clothes} = Shops.delete_clothes(clothes) | ||||
| 
 | ||||
|     conn | ||||
|     |> put_flash(:info, "Clothes deleted successfully.") | ||||
|     |> redirect(to: Routes.clothes_path(conn, :index)) | ||||
|   end | ||||
| end | ||||
|  | ||||
| @ -3,45 +3,12 @@ defmodule PokemonCoutureWeb.ClothesTrackerLive do | ||||
| 
 | ||||
|   alias PokemonCouture.Shops | ||||
|   alias PokemonCouture.Accounts | ||||
|   alias PokemonCouture.Shops.Clothes | ||||
| 
 | ||||
|   def create_shop_map(clothes, map) do | ||||
|     case map[clothes.location] do | ||||
|       nil -> | ||||
|         Map.put(map, clothes.location, %{clothes.type => [clothes]}) | ||||
|       map_of_clothes when is_map(map_of_clothes) -> | ||||
|         map_of_clothes = case map_of_clothes[clothes.type] do | ||||
|           nil -> | ||||
|             Map.put(map_of_clothes, clothes.type, [clothes]) | ||||
|           list_of_clothes when is_list(list_of_clothes) -> | ||||
|             Map.put(map_of_clothes, clothes.type, [clothes | list_of_clothes]) | ||||
|         end | ||||
|         Map.put(map, clothes.location, map_of_clothes) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def assign_clothespiece_to_map(clothes, map) do | ||||
|     case map[clothes.name] do | ||||
|       nil -> | ||||
|         Map.put(map, clothes.name, [clothes]) | ||||
|       list_of_clothes when is_list(list_of_clothes) -> | ||||
|         Map.put(map, clothes.name, [clothes | list_of_clothes]) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def inner_map_creator({type, list}, acc) do | ||||
|     clothes_map = Enum.reduce(list, %{}, &assign_clothespiece_to_map/2) | ||||
|     clothes_map = for {shop, map} <- clothes_map | ||||
|                    do {shop, Enum.sort_by(map, fn %Clothes{game: game} -> game end)} | ||||
|                   end | ||||
|     Map.put(acc, type, clothes_map) | ||||
|   end | ||||
| 
 | ||||
|   def mount(_params, %{"user_token" => user_token} = _session, socket) do | ||||
|     user = Accounts.get_user_by_session_token(user_token) | ||||
|     clothes_map = Enum.reduce(Shops.list_clothes_with_owners(), %{}, &create_shop_map/2) | ||||
|     clothes_map = Shops.create_shop_map() | ||||
|     clothes_map = for {shop, map} <- clothes_map | ||||
|                     do {shop, Enum.reduce(map, %{}, &inner_map_creator/2)} | ||||
|                     do {shop, Enum.reduce(map, %{}, &Shops.inner_map_creator/2)} | ||||
|                   end | ||||
|     socket = | ||||
|       socket | ||||
|  | ||||
| @ -1,5 +0,0 @@ | ||||
| <h1>Edit Clothes</h1> | ||||
| 
 | ||||
| <%= render "form.html", Map.put(assigns, :action, Routes.clothes_path(@conn, :update, @clothes)) %> | ||||
| 
 | ||||
| <span><%= link "Back", to: Routes.clothes_path(@conn, :index) %></span> | ||||
| @ -1,29 +1,32 @@ | ||||
| <h1>Listing Clothes</h1> | ||||
| <%= for {shop, list_of_clothes} <- @clothes_map do %> | ||||
| <%= for {shop, map_of_clothes_by_type} <- @clothes_map do %> | ||||
|   <h2> <%= shop %></h2> | ||||
|   <table> | ||||
|     <thead> | ||||
|       <tr> | ||||
|         <th>Name</th> | ||||
|         <th>Color</th> | ||||
|         <th>Game</th> | ||||
|         <th></th> | ||||
|       </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
|   <%= for clothes <- list_of_clothes do %> | ||||
|       <tr> | ||||
|         <td><%= clothes.name %></td> | ||||
|         <td><%= clothes.color %></td> | ||||
|         <td><%= clothes.game %></td> | ||||
|   <%= for {type, map_of_clothes_by_name} <- map_of_clothes_by_type do %> | ||||
|     <h3> <%= type %></h3> | ||||
|     <table> | ||||
|       <thead> | ||||
|         <tr> | ||||
|           <th>Name</th> | ||||
|           <th>Color</th> | ||||
|           <th>Game</th> | ||||
|           <th></th> | ||||
|         </tr> | ||||
|       </thead> | ||||
|       <tbody> | ||||
|     <%= for {_name, list_of_clothes} <- map_of_clothes_by_name do %> | ||||
|       <%= for clothes <- list_of_clothes do %> | ||||
|         <tr> | ||||
|           <td><%= clothes.name %></td> | ||||
|           <td><%= clothes.color %></td> | ||||
|           <td><%= clothes.game %></td> | ||||
| 
 | ||||
|         <td> | ||||
|           <span><%= link "Show", to: Routes.clothes_path(@conn, :show, clothes) %></span> | ||||
|           <span><%= link "Edit", to: Routes.clothes_path(@conn, :edit, clothes) %></span> | ||||
|           <span><%= link "Delete", to: Routes.clothes_path(@conn, :delete, clothes), method: :delete, data: [confirm: "Are you sure?"] %></span> | ||||
|         </td> | ||||
|       </tr> | ||||
|           <td> | ||||
|             <span><%= link "Show", to: Routes.clothes_path(@conn, :show, clothes) %></span> | ||||
|           </td> | ||||
|         </tr> | ||||
|       <% end %> | ||||
|     <% end %> | ||||
|       </tbody> | ||||
|     </table> | ||||
|   <% end %> | ||||
|     </tbody> | ||||
|   </table> | ||||
| <% end %> | ||||
|  | ||||
| @ -1,5 +0,0 @@ | ||||
| <h1>New Clothes</h1> | ||||
| 
 | ||||
| <%= render "form.html", Map.put(assigns, :action, Routes.clothes_path(@conn, :create)) %> | ||||
| 
 | ||||
| <span><%= link "Back", to: Routes.clothes_path(@conn, :index) %></span> | ||||
| @ -7,12 +7,15 @@ | ||||
|     <%= @clothes.name %> | ||||
|   </li> | ||||
| 
 | ||||
| 
 | ||||
|   <li> | ||||
|     <strong>Color:</strong> | ||||
|     <%= @clothes.color %> | ||||
|   </li> | ||||
| 
 | ||||
|   <li> | ||||
|     <strong>Type:</strong> | ||||
|     <%= @clothes.type %> | ||||
|   </li> | ||||
| 
 | ||||
|   <li> | ||||
|     <strong>Location:</strong> | ||||
| @ -25,6 +28,4 @@ | ||||
|   </li> | ||||
| 
 | ||||
| </ul> | ||||
| 
 | ||||
| <span><%= link "Edit", to: Routes.clothes_path(@conn, :edit, @clothes) %></span> | ||||
| <span><%= link "Back", to: Routes.clothes_path(@conn, :index) %></span> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user