diff --git a/lib/ret/api/dataloader.ex b/lib/ret/api/dataloader.ex new file mode 100644 index 000000000..dbe133f7f --- /dev/null +++ b/lib/ret/api/dataloader.ex @@ -0,0 +1,10 @@ +defmodule Ret.Api.Dataloader do + @moduledoc "Configuration for dataloader" + + alias Ret.{Repo, Scene, SceneListing} + + def source(), do: Dataloader.Ecto.new(Repo, query: &query/2) + # Guard against loading removed scenes or delisted scene listings + def query(Scene, _), do: from(s in Scene, where: s.state != ^:removed) + def query(SceneListing, _), do: from(sl in SceneListing, where: sl.state != ^:delisted) +end diff --git a/lib/ret/scene.ex b/lib/ret/scene.ex index e509b27f6..2df68da52 100644 --- a/lib/ret/scene.ex +++ b/lib/ret/scene.ex @@ -55,12 +55,6 @@ defmodule Ret.Scene do timestamps() end - # Dataloader - def data(), do: Dataloader.Ecto.new(Repo, query: &query/2) - # Guard against loading removed scenes or delisted scene listings - def query(Scene, _), do: from(s in Scene, where: s.state != ^:removed) - def query(SceneListing, _), do: from(sl in SceneListing, where: sl.state != ^:delisted) - def scene_or_scene_listing_by_sid(sid) do Scene |> Repo.get_by(scene_sid: sid) || SceneListing |> Repo.get_by(scene_listing_sid: sid) |> Repo.preload(scene: Scene.scene_preloads()) diff --git a/lib/ret_web/schema.ex b/lib/ret_web/schema.ex index 4e928676c..fe4b8b770 100644 --- a/lib/ret_web/schema.ex +++ b/lib/ret_web/schema.ex @@ -2,7 +2,6 @@ defmodule RetWeb.Schema do @moduledoc false use Absinthe.Schema - alias Ret.Scene import RetWeb.Middleware, only: [build_middleware: 3] @@ -25,7 +24,7 @@ defmodule RetWeb.Schema do def context(ctx) do loader = Dataloader.new() - |> Dataloader.add_source(Scene, Scene.data()) + |> Dataloader.add_source(:db, Ret.Api.Dataloader.source()) Map.put(ctx, :loader, loader) end