diff --git a/lib/plausible/auth/user.ex b/lib/plausible/auth/user.ex index 5c0fe34cc37cd3c54eacbc287fb949c19c58eef5..bfb3eafd27e6234bb36c9769953c3c8b6ed5f3fe 100644 --- a/lib/plausible/auth/user.ex +++ b/lib/plausible/auth/user.ex @@ -17,6 +17,7 @@ defmodule Plausible.Auth.User do field :name, :string field :last_seen, :naive_datetime field :trial_expiry_date, :date + field :grace_period_end, :date field :theme, :string field :email_verified, :boolean @@ -79,6 +80,10 @@ defmodule Plausible.Auth.User do change(user, trial_expiry_date: Timex.today() |> Timex.shift(days: -1)) end + def start_grace_period(user) do + change(user, grace_period_end: Timex.today() |> Timex.shift(days: 7)) + end + defp trial_expiry() do if Application.get_env(:plausible, :is_selfhost) do Timex.today() |> Timex.shift(years: 100) diff --git a/lib/plausible_web/templates/email/over_limit.html.eex b/lib/plausible_web/templates/email/over_limit.html.eex index 4fa5ba502ac8aed30337d491e83960af04d8a219..a05db28a1a04e41c2ef08fc0e89c6dfe5c382cd6 100644 --- a/lib/plausible_web/templates/email/over_limit.html.eex +++ b/lib/plausible_web/templates/email/over_limit.html.eex @@ -2,9 +2,9 @@ Hey <%= user_salutation(@user) %>, <br /><br /> Thanks for being a Plausible Analytics subscriber! <br /><br /> -This is a friendly reminder that your traffic has exceeded your subscription tier two months in a row. Congrats on all that traffic! +This is a notice that your traffic has exceeded your subscription tier two months in a row. Congrats on all that traffic! <br /><br /> -We don't enforce any hard limits at the moment, we're still counting your stats and you have access to your dashboard, but we kindly ask you to upgrade your subscription plan to accommodate your new traffic levels. +In order to keep your stats running, we require you to upgrade your account to accommodate your new traffic levels. If you do not upgrade your account within the next 7 days, we will lock your sites and they won't be accessible. <br /><br /> In the last billing cycle (<%= date_format(@last_cycle.first) %> to <%= date_format(@last_cycle.last) %>), your account has used <%= PlausibleWeb.StatsView.large_number_format(@usage) %> billable pageviews. <%= if @usage <= 20_000_000 do %> @@ -17,8 +17,6 @@ You can upgrade your subscription using our self-serve platform. The new charge This is more than our standard plans, so please reply back to this email to get a quote for your volume. <% end %> <br /><br /> -Were the last two months extraordinary and you don't expect these higher traffic levels to continue? Reply to this email and we'll figure it out. -<br /><br /> Have questions or need help with anything? Just reply to this email and we'll gladly help. <br /><br /> Thanks again for using our product and for your support! diff --git a/lib/workers/check_usage.ex b/lib/workers/check_usage.ex index 6de1d8027e59960ce287fbddfb27dac2f22fac23..41abcb2b7f6a2e2f6384d5efed1b82957c3d5414 100644 --- a/lib/workers/check_usage.ex +++ b/lib/workers/check_usage.ex @@ -96,6 +96,7 @@ defmodule Plausible.Workers.CheckUsage do ) Plausible.Mailer.send_email_safe(template) + Plausible.Auth.User.start_grace_period(subscriber) |> Repo.update() _ -> nil diff --git a/priv/repo/migrations/20211028122202_grace_period_end.exs b/priv/repo/migrations/20211028122202_grace_period_end.exs new file mode 100644 index 0000000000000000000000000000000000000000..c0b6a64cadb15a97e29b8337b7eb5ce3881cedba --- /dev/null +++ b/priv/repo/migrations/20211028122202_grace_period_end.exs @@ -0,0 +1,9 @@ +defmodule Plausible.Repo.Migrations.GracePeriodEnd do + use Ecto.Migration + + def change do + alter table(:users) do + add :grace_period_end, :date + end + end +end diff --git a/test/workers/check_usage_test.exs b/test/workers/check_usage_test.exs index 833593da3c54b77b6b4f44120cedce39a546bbc4..fa92f4662f8f9dcd0c1bb4f8afbe76178821d9a8 100644 --- a/test/workers/check_usage_test.exs +++ b/test/workers/check_usage_test.exs @@ -24,6 +24,7 @@ defmodule Plausible.Workers.CheckUsageTest do CheckUsage.perform(nil) assert_no_emails_delivered() + assert Repo.reload(user).grace_period_end == nil end test "does not send an email if account has been over the limit for one billing month", %{ @@ -45,6 +46,7 @@ defmodule Plausible.Workers.CheckUsageTest do CheckUsage.perform(nil, billing_stub) assert_no_emails_delivered() + assert Repo.reload(user).grace_period_end == nil end test "sends an email when an account is over their limit for two consecutive billing months", %{ @@ -69,6 +71,8 @@ defmodule Plausible.Workers.CheckUsageTest do to: [user], subject: "You have outgrown your Plausible subscription tier" ) + + assert Repo.reload(user).grace_period_end == Timex.shift(Timex.today(), days: 7) end describe "enterprise customers" do