Skip to content

Commit

Permalink
Add join table - populate with data
Browse files Browse the repository at this point in the history
  • Loading branch information
cavis committed May 9, 2024
1 parent 70e81c2 commit c80b199
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
41 changes: 41 additions & 0 deletions db/migrate/20240509194515_create_episode_feeds.rb
@@ -0,0 +1,41 @@
class CreateEpisodeFeeds < ActiveRecord::Migration[7.0]
include TextSanitizer

def up
create_table :episodes_feeds, id: false do |t|
t.belongs_to :episode
t.belongs_to :feed
end

Feed.includes(:podcast).find_each do |f|
sql = <<-SQL.squish
INSERT INTO episodes_feeds
SELECT id AS episode_id, #{f.id} AS feed_id
FROM episodes
WHERE deleted_at IS NULL AND podcast_id = #{f.podcast_id}
SQL

if f.include_tags.present?
kws = f.sanitize_keywords(f.include_tags, true)
ids = f.podcast.episodes.filter_map do |e|
e.id if (sanitize_keywords(e.categories, true) & kws).any?
end
sql << " AND episodes.id IN (#{ids.concat([0]).join(",")})"
end

if f.exclude_tags.present?
kws = f.sanitize_keywords(f.exclude_tags, true)
ids = f.podcast.episodes.filter_map do |e|
e.id if (sanitize_keywords(e.categories, true) & kws).any?
end
sql << " AND episodes.id NOT IN (#{ids.join(",")})" if ids.any?
end

Feed.connection.execute(sql)
end
end

def down
drop_table :episodes_feeds
end
end
9 changes: 8 additions & 1 deletion db/schema.rb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit c80b199

Please sign in to comment.