File size: 1,266 Bytes
8da2481
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
defmodule PlausibleWeb.UnsubscribeController do
  use PlausibleWeb, :controller
  use Plausible.Repo
  alias Plausible.Site.{WeeklyReport, MonthlyReport}

  def weekly_report(conn, %{"domain" => domain, "email" => email}) do
    site = Repo.get_by(Plausible.Site, domain: domain)
    weekly_report = site && Repo.get_by(WeeklyReport, site_id: site.id)

    if weekly_report do
      weekly_report
      |> WeeklyReport.remove_recipient(email)
      |> Repo.update!()
    end

    conn
    |> assign(:skip_plausible_tracking, true)
    |> render("success.html",
      interval: "weekly",
      site: site || %{domain: domain}
    )
  end

  def weekly_report(conn, _) do
    render_error(conn, 400)
  end

  def monthly_report(conn, %{"domain" => domain, "email" => email}) do
    site = Repo.get_by(Plausible.Site, domain: domain)
    monthly_report = site && Repo.get_by(MonthlyReport, site_id: site.id)

    if monthly_report do
      monthly_report
      |> MonthlyReport.remove_recipient(email)
      |> Repo.update!()
    end

    conn
    |> assign(:skip_plausible_tracking, true)
    |> render("success.html",
      interval: "monthly",
      site: site || %{domain: domain}
    )
  end

  def monthly_report(conn, _) do
    render_error(conn, 400)
  end
end