commit c1be9a8614d1a2f7f8422224deb1bc67be78c88b
parent 5fa223fa9225434252b8cac597d816b35c908147
Author: srfsh <dev@srf.sh>
Date: Thu, 6 Oct 2022 17:24:28 +0300
Zenflows{,Test}.VF.EconomicResource: add support for listing all classifications
Requested by Puria for front-end tag completion.
Diffstat:
4 files changed, 25 insertions(+), 0 deletions(-)
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