diff --git a/lib/plausible/pending_stats_deletion.ex b/lib/plausible/pending_stats_deletion.ex index 9cedc6433f54..c9568766e1a2 100644 --- a/lib/plausible/pending_stats_deletion.ex +++ b/lib/plausible/pending_stats_deletion.ex @@ -5,7 +5,7 @@ defmodule Plausible.PendingStatsDeletion do use Ecto.Schema - @reasons [:user_request] + @reasons [:user_request, :inactive_trial, :inactive_subscription] @type t() :: %__MODULE__{} diff --git a/lib/plausible/site/removal.ex b/lib/plausible/site/removal.ex index 931503e2728b..e340096943ac 100644 --- a/lib/plausible/site/removal.ex +++ b/lib/plausible/site/removal.ex @@ -12,10 +12,12 @@ defmodule Plausible.Site.Removal do @spec run(Plausible.Site.t(), Keyword.t()) :: {:ok, map()} def run(site, opts \\ []) do + reason = Keyword.get(opts, :reason, :user_request) + Repo.transaction(fn -> site = Repo.preload(site, :team) - {:ok, pending_stats_deletion} = PendingStatsDeletions.store(site) + {:ok, pending_stats_deletion} = PendingStatsDeletions.store(site, reason) result = Repo.delete_all(from(s in Plausible.Site, where: s.domain == ^site.domain)) diff --git a/test/plausible/site/site_removal_test.exs b/test/plausible/site/site_removal_test.exs index 11f7cfa15f03..f9f606368e9c 100644 --- a/test/plausible/site/site_removal_test.exs +++ b/test/plausible/site/site_removal_test.exs @@ -40,6 +40,15 @@ defmodule Plausible.Site.SiteRemovalTest do assert Repo.get_by(PendingStatsDeletion, site_id: site.id) end + test "site deletion accepts an explicit reason for the pending stats deletion" do + site = new_site() + + assert {:ok, context} = Removal.run(site, reason: :inactive_trial) + + assert context.pending_stats_deletion.reason == :inactive_trial + assert Repo.get_by(PendingStatsDeletion, site_id: site.id, reason: :inactive_trial) + end + test "site deletion prunes team guest memberships" do owner = new_user() site = new_site(owner: owner)