Skip to content

Commit

Permalink
Toggle off ++ feeds for now-inactive members
Browse files Browse the repository at this point in the history
  • Loading branch information
jerodsanto committed Feb 4, 2025
1 parent 47b4854 commit de4700e
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 0 deletions.
2 changes: 2 additions & 0 deletions config/prod.exs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ config :changelog, Oban,
{"00 3 * * *", Changelog.ObanWorkers.ZulipImporter},
# 3:30am daily
{"30 3 * * *", Changelog.ObanWorkers.PersonBouncer},
# 3:45am daily
{"45 3 * * *", Changelog.ObanWorkers.FeedBouncer},
# 4am daily
{"00 4 * * *", Changelog.ObanWorkers.EpisodeStatsProcessor},
# 4:45am daily
Expand Down
34 changes: 34 additions & 0 deletions lib/changelog/oban_workers/feed_bouncer.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
defmodule Changelog.ObanWorkers.FeedBouncer do
@moduledoc """
This module defines the Oban worker for switching inactive members'
feeds back to public mp3s
"""
use Oban.Worker, queue: :scheduled

import Ecto.Changeset, only: [change: 2]

alias Changelog.{EventLog, Feed, Policies, Repo}

@impl Oban.Worker
def perform(_job) do
plusplus =
Feed
|> Feed.plusplus()
|> Feed.preload_owner()
|> Repo.all()

for feed = %{owner: owner} <- plusplus do
if !Policies.Feed.plusplus(owner) do
{:ok, feed} = feed |> change(%{plusplus: false}) |> Repo.update()
log("Turned off pluplus for feed ##{feed.id} owned by inactive member ##{owner.id} (#{owner.email})")
Changelog.ObanWorkers.FeedUpdater.queue(feed)
end
end

:ok
end

defp log(message) do
EventLog.insert(message, "FeedBouncer")
end
end
2 changes: 2 additions & 0 deletions lib/changelog/schema/feed.ex
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ defmodule Changelog.Feed do

def get_by_slug!(slug), do: Repo.get_by!(__MODULE__, slug: slug)

def plusplus(query \\ __MODULE__), do: from(q in query, where: q.plusplus)

def with_podcast_id(query \\ __MODULE__, id),
do: from(q in query, where: fragment("? = ANY(?)", ^id, q.podcast_ids))

Expand Down

0 comments on commit de4700e

Please sign in to comment.