defmodule PlausibleWeb.Plugins.API.Views.Goal do @moduledoc """ View for rendering Goals in the Plugins API """ use PlausibleWeb, :plugins_api_view def render("index.json", %{ pagination: %{entries: goals, metadata: metadata}, authorized_site: site, conn: conn }) do %{ goals: render_many(goals, __MODULE__, "goal.json", authorized_site: site, as: :goal), meta: render_metadata_links(metadata, :plugins_api_goals_url, :index, conn.query_params) } end def render("index.json", %{ goals: goals, authorized_site: site, conn: conn }) do %{ goals: render_many(goals, __MODULE__, "goal.json", authorized_site: site, as: :goal), meta: render_metadata_links(%{}, :plugins_api_goals_url, :index, conn.query_params) } end def render("goal.json", %{ goal: %{event_name: nil} = pageview }) do %{ goal_type: "Goal.Pageview", goal: %{ id: pageview.id, display_name: pageview.display_name, path: pageview.page_path, custom_props: pageview.custom_props || %{} } } end def render("goal.json", %{ goal: %{page_path: nil, currency: nil} = custom_event }) do %{ goal_type: "Goal.CustomEvent", goal: %{ id: custom_event.id, display_name: custom_event.display_name, event_name: custom_event.event_name, custom_props: custom_event.custom_props || %{} } } end def render("goal.json", %{ goal: %{page_path: nil, currency: currency} = revenue_goal }) when is_atom(currency) do %{ goal_type: "Goal.Revenue", goal: %{ id: revenue_goal.id, display_name: revenue_goal.display_name, event_name: revenue_goal.event_name, currency: revenue_goal.currency, custom_props: revenue_goal.custom_props || %{} } } end end