diff --git a/lib/pinchflat/media/media_item.ex b/lib/pinchflat/media/media_item.ex index a671d58..fbf740f 100644 --- a/lib/pinchflat/media/media_item.ex +++ b/lib/pinchflat/media/media_item.ex @@ -7,6 +7,8 @@ defmodule Pinchflat.Media.MediaItem do import Ecto.Changeset import Pinchflat.Utils.ChangesetUtils + alias __MODULE__ + alias Pinchflat.Repo alias Pinchflat.Tasks.Task alias Pinchflat.Sources.Source alias Pinchflat.Metadata.MediaMetadata @@ -116,4 +118,18 @@ defmodule Pinchflat.Media.MediaItem do end) |> Enum.into(%{}) end + + @doc false + def json_exluded_fields do + ~w(__meta__ __struct__ metadata tasks media_items_search_index)a + end + + defimpl Jason.Encoder, for: MediaItem do + def encode(value, opts) do + value + |> Repo.preload(:source) + |> Map.drop(MediaItem.json_exluded_fields()) + |> Jason.Encode.map(opts) + end + end end diff --git a/lib/pinchflat/profiles/media_profile.ex b/lib/pinchflat/profiles/media_profile.ex index be6c6a0..fadc90b 100644 --- a/lib/pinchflat/profiles/media_profile.ex +++ b/lib/pinchflat/profiles/media_profile.ex @@ -6,6 +6,7 @@ defmodule Pinchflat.Profiles.MediaProfile do use Ecto.Schema import Ecto.Changeset + alias __MODULE__ alias Pinchflat.Sources.Source @allowed_fields ~w( @@ -84,4 +85,17 @@ defmodule Pinchflat.Profiles.MediaProfile do def ext_regex do ~r/\.({{ ?ext ?}}|%\( ?ext ?\)[sS])$/ end + + @doc false + def json_exluded_fields do + ~w(__meta__ __struct__ sources)a + end + + defimpl Jason.Encoder, for: MediaProfile do + def encode(value, opts) do + value + |> Map.drop(MediaProfile.json_exluded_fields()) + |> Jason.Encode.map(opts) + end + end end diff --git a/lib/pinchflat/sources/source.ex b/lib/pinchflat/sources/source.ex index a02c8c0..02af5bd 100644 --- a/lib/pinchflat/sources/source.ex +++ b/lib/pinchflat/sources/source.ex @@ -7,6 +7,8 @@ defmodule Pinchflat.Sources.Source do import Ecto.Changeset import Pinchflat.Utils.ChangesetUtils + alias __MODULE__ + alias Pinchflat.Repo alias Pinchflat.Tasks.Task alias Pinchflat.Media.MediaItem alias Pinchflat.Profiles.MediaProfile @@ -133,4 +135,18 @@ defmodule Pinchflat.Sources.Source do def filepath_attributes do ~w(nfo_filepath fanart_filepath poster_filepath banner_filepath)a end + + @doc false + def json_exluded_fields do + ~w(__meta__ __struct__ metadata tasks media_items)a + end + + defimpl Jason.Encoder, for: Source do + def encode(value, opts) do + value + |> Repo.preload(:media_profile) + |> Map.drop(Source.json_exluded_fields()) + |> Jason.Encode.map(opts) + end + end end diff --git a/test/pinchflat/media_test.exs b/test/pinchflat/media_test.exs index f972259..1c91be6 100644 --- a/test/pinchflat/media_test.exs +++ b/test/pinchflat/media_test.exs @@ -29,6 +29,12 @@ defmodule Pinchflat.MediaTest do Repo.reload!(metadata) end end + + test "can be JSON encoded without error" do + media_item = media_item_fixture() + + assert {:ok, _} = Phoenix.json_library().encode(media_item) + end end describe "list_media_items/0" do diff --git a/test/pinchflat/profiles_test.exs b/test/pinchflat/profiles_test.exs index 6bb597e..79405c2 100644 --- a/test/pinchflat/profiles_test.exs +++ b/test/pinchflat/profiles_test.exs @@ -10,6 +10,14 @@ defmodule Pinchflat.ProfilesTest do @invalid_attrs %{name: nil, output_path_template: nil} + describe "schema" do + test "can be JSON encoded without error" do + profile = media_profile_fixture() + + assert {:ok, _} = Phoenix.json_library().encode(profile) + end + end + describe "list_media_profiles/0" do test "it returns all media_profiles" do media_profile = media_profile_fixture() diff --git a/test/pinchflat/sources_test.exs b/test/pinchflat/sources_test.exs index 4fb3509..28e9f16 100644 --- a/test/pinchflat/sources_test.exs +++ b/test/pinchflat/sources_test.exs @@ -32,6 +32,12 @@ defmodule Pinchflat.SourcesTest do Repo.reload!(metadata) end end + + test "can be JSON encoded without error" do + source = source_fixture() + + assert {:ok, _} = Phoenix.json_library().encode(source) + end end describe "output_path_template/1" do