commit 6630fa80659840857efa55538b5021fbfc045ae4
parent 1bb740c630bdd5ba9b6b9fa0ead712b4ac8b1d51
Author: sir fish <dev@srf.sh>
Date: Thu, 6 Oct 2022 14:30:02 +0000
Merge pull request #21 from dyne/srfsh/tags
Fix tags creation and implement listing all tags
Diffstat:
5 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/src/zenflows/vf/economic_event/domain.ex b/src/zenflows/vf/economic_event/domain.ex
@@ -57,7 +57,7 @@ def create(evt_params, res_params) do
Multi.new()
|> Multi.insert(:created_evt, EconomicEvent.chgset(evt_params))
|> Multi.merge(fn %{created_evt: evt} ->
- handle_multi(evt.action_id, evt, res_params)
+ handle_multi(evt.action_id, evt, res_params || %{}) # since it can be empty
end)
|> Repo.transaction()
|> case do
@@ -99,6 +99,7 @@ defp handle_multi(action_id, evt, res_params) when action_id in ["raise", "produ
|> Map.put(:onhand_quantity_has_unit_id, evt.resource_quantity_has_unit_id)
|> Map.put(:onhand_quantity_has_numerical_value, evt.resource_quantity_has_numerical_value)
|> Map.put(:current_location_id, evt.to_location_id)
+ |> Map.put(:classified_as, evt.resource_classified_as)
|> EconomicResource.chgset()
Multi.new()
@@ -584,7 +585,7 @@ defp handle_multi("transferCustody", evt, res_params) do
])
else
cset =
- (res_params || %{}) # since it can be empty
+ res_params
|> Map.put(:primary_accountable_id, evt.receiver_id)
|> Map.put(:custodian_id, evt.receiver_id)
|> Map.put(:conforms_to_id, res.conforms_to_id)
@@ -696,7 +697,7 @@ defp handle_multi("transferAllRights", evt, res_params) do
])
else
cset =
- (res_params || %{}) # since it can be empty
+ res_params
|> Map.put(:primary_accountable_id, evt.receiver_id)
|> Map.put(:custodian_id, evt.receiver_id)
|> Map.put(:conforms_to_id, res.conforms_to_id)
@@ -819,7 +820,7 @@ defp handle_multi("transfer", evt, res_params) do
])
else
cset =
- (res_params || %{}) # since it can be empty
+ res_params
|> Map.put(:primary_accountable_id, evt.receiver_id)
|> Map.put(:custodian_id, evt.receiver_id)
|> Map.put(:conforms_to_id, res.conforms_to_id)
@@ -951,7 +952,7 @@ defp handle_multi("move", evt, res_params) do
])
else
cset =
- (res_params || %{}) # since it can be empty
+ res_params
|> Map.put(:primary_accountable_id, evt.receiver_id)
|> Map.put(:custodian_id, evt.receiver_id)
|> Map.put(:conforms_to_id, res.conforms_to_id)
diff --git a/src/zenflows/vf/economic_resource/domain.ex b/src/zenflows/vf/economic_resource/domain.ex
@@ -50,6 +50,15 @@ def all(params \\ %{}) do
end
end
+@spec classifications() :: [String.t()]
+def classifications() do
+ import Ecto.Query
+
+ from(r in EconomicResource,
+ select: fragment("distinct unnest(?)", r.classified_as))
+ |> Repo.all()
+end
+
@spec update(id(), params()) :: {:ok, EconomicResource.t()} | {:error, error()}
def update(id, params) do
Multi.new()
diff --git a/src/zenflows/vf/economic_resource/resolv.ex b/src/zenflows/vf/economic_resource/resolv.ex
@@ -30,6 +30,10 @@ def economic_resources(params, _) do
Domain.all(params)
end
+def economic_resource_classifications(_, _) do
+ {:ok, Domain.classifications()}
+end
+
def update_economic_resource(%{resource: %{id: id} = params}, _) do
with {:ok, eco_res} <- Domain.update(id, params) do
{:ok, %{economic_resource: eco_res}}
diff --git a/src/zenflows/vf/economic_resource/type.ex b/src/zenflows/vf/economic_resource/type.ex
@@ -256,6 +256,10 @@ object :query_economic_resource do
arg :filter, :economic_resource_filter_params
resolve &Resolv.economic_resources/2
end
+
+ field :economic_resource_classifications, list_of(non_null(:uri)) do
+ resolve &Resolv.economic_resource_classifications/2
+ end
end
object :mutation_economic_resource do
diff --git a/test/vf/economic_resource/domain.test.exs b/test/vf/economic_resource/domain.test.exs
@@ -76,6 +76,14 @@ test "by_id/1 returns a EconomicResource", %{inserted: eco_res} do
assert {:ok, %EconomicResource{}} = Domain.one(eco_res.id)
end
+test "classifications/0 returns list of unique `classified_as` values" do
+ Enum.each(1..10, fn _ -> Factory.insert!(:economic_resource) end)
+ {:ok, %{edges: edges}} = Domain.all()
+ left = Enum.flat_map(edges, & &1.node.classified_as)
+ right = Domain.classifications()
+ assert [] = left -- right
+end
+
describe "update/2" do
@tag skip: "TODO: fix economic resource factory"
test "doesn't update a EconomicResource", %{inserted: old} do