| defmodule Plausible.Site.TrackerScriptCache do |
| @moduledoc """ |
| Caches the full tracker script. |
| Must be refreshed whenever the TrackerScriptConfiguration associated with the script changes. |
| """ |
| alias Plausible.Site.TrackerScriptConfiguration |
| alias PlausibleWeb.Tracker |
|
|
| import Ecto.Query |
| use Plausible |
| use Plausible.Cache |
|
|
| @cache_name :tracker_script_cache |
|
|
| @impl true |
| def name(), do: @cache_name |
|
|
| @impl true |
| def child_id(), do: :cache_tracker_script |
|
|
| def cache_content( |
| %TrackerScriptConfiguration{site: %{domain: _domain}} = tracker_script_configuration |
| ), |
| do: Tracker.build_script(tracker_script_configuration) |
|
|
| @impl true |
| def count_all() do |
| Plausible.Repo.aggregate(TrackerScriptConfiguration, :count) |
| end |
|
|
| @impl true |
| def base_db_query(), do: Tracker.get_tracker_script_configuration_base_query() |
|
|
| @impl true |
| def get_from_source(id) do |
| case Tracker.get_tracker_script_configuration_by_id(id) do |
| %TrackerScriptConfiguration{site: %{domain: _domain}} = tracker_script_configuration -> |
| cache_content(tracker_script_configuration) |
|
|
| _ -> |
| nil |
| end |
| end |
|
|
| @impl true |
| def unwrap_cache_keys(items) do |
| Enum.reduce(items, [], fn |
| tracker_script_configuration, acc -> |
| [ |
| {tracker_script_configuration.id, cache_content(tracker_script_configuration)} |
| | acc |
| ] |
| end) |
| end |
| end |
|
|