| defmodule Plausible.Site.TrackerScriptIdCache do | |
| @moduledoc """ | |
| Cache for tracker script IDs to avoid excessive database lookups when the | |
| script API endpoint is bombarded with random IDs. | |
| """ | |
| alias Plausible.Site.TrackerScriptConfiguration | |
| alias PlausibleWeb.Tracker | |
| import Ecto.Query | |
| use Plausible | |
| use Plausible.Cache | |
| @cache_name :tracker_script_id_cache | |
| @impl true | |
| def name(), do: @cache_name | |
| @impl true | |
| def child_id(), do: :cache_tracker_script_id | |
| @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}} -> | |
| true | |
| _ -> | |
| nil | |
| end | |
| end | |
| @impl true | |
| def unwrap_cache_keys(items) do | |
| Enum.reduce(items, [], fn | |
| tracker_script_configuration, acc -> | |
| [ | |
| {tracker_script_configuration.id, true} | |
| | acc | |
| ] | |
| end) | |
| end | |
| end | |