boutique-inventory
This commit is contained in:
41
elixir/boutique-inventory/lib/boutique_inventory.ex
Normal file
41
elixir/boutique-inventory/lib/boutique_inventory.ex
Normal file
@@ -0,0 +1,41 @@
|
||||
defmodule BoutiqueInventory do
|
||||
def sort_by_price(inventory) do
|
||||
Enum.sort_by(inventory, & &1[:price])
|
||||
end
|
||||
|
||||
def with_missing_price(inventory) do
|
||||
Enum.filter(inventory, &(!&1[:price]))
|
||||
end
|
||||
|
||||
def update_names(inventory, old_word, new_word) do
|
||||
inventory
|
||||
|> Enum.map(fn item ->
|
||||
new_name = String.replace(item.name, old_word, new_word)
|
||||
%{item | name: new_name}
|
||||
end)
|
||||
end
|
||||
|
||||
def increase_quantity(item, count) do
|
||||
item
|
||||
|> Map.get_and_update(:quantity_by_size, fn quantities ->
|
||||
{quantities, update_quantities(quantities, count)}
|
||||
end)
|
||||
|> elem(1)
|
||||
end
|
||||
|
||||
defp update_quantities(quantities, count) do
|
||||
quantities
|
||||
|> Map.to_list()
|
||||
|> Enum.map(&increase_size_quantity(&1, count))
|
||||
|> Enum.into(%{})
|
||||
end
|
||||
|
||||
defp increase_size_quantity({key, value}, count), do: {key, value + count}
|
||||
|
||||
def total_quantity(item) do
|
||||
item.quantity_by_size
|
||||
|> Enum.reduce(0, &sum_total_quantity/2)
|
||||
end
|
||||
|
||||
defp sum_total_quantity({_key, value}, acc), do: acc + value
|
||||
end
|
||||
Reference in New Issue
Block a user