class BadgePostsViewManager VIEW_NAME = "badge_posts".freeze def self.create! sql = <<~SQL CREATE VIEW #{VIEW_NAME} AS SELECT p.* FROM posts p JOIN topics t ON t.id = p.topic_id JOIN categories c ON c.id = t.category_id WHERE c.allow_badges AND p.deleted_at IS NULL AND t.deleted_at IS NULL AND NOT c.read_restricted AND t.visible AND p.post_type IN (1,2,3) SQL DB.exec(sql) raise "Failed to create '#{VIEW_NAME}' view" unless badge_posts_view_exists? end def self.drop! DB.exec("DROP VIEW #{VIEW_NAME}") raise "Failed to drop '#{VIEW_NAME}' view" if badge_posts_view_exists? end def self.badge_posts_view_exists? sql = <<~SQL SELECT 1 FROM pg_catalog.pg_views WHERE schemaname IN ('public') AND viewname = '#{VIEW_NAME}'; SQL DB.exec(sql) == 1 end end