discourse/db/migrate/20190227210035_add_missing_topic_id_site_settings.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

70 lines
2.1 KiB
Ruby

# frozen_string_literal: true
class AddMissingTopicIdSiteSettings < ActiveRecord::Migration[5.2]
def up
# Welcome Topic
execute <<~SQL
INSERT INTO site_settings(name, data_type, value, created_at, updated_at)
SELECT 'welcome_topic_id', 3, topic_id, created_at, updated_at
FROM topic_custom_fields
WHERE name = 'is_welcome_topic' AND value = 'true' AND NOT EXISTS(
SELECT 1
FROM site_settings
WHERE name = 'welcome_topic_id'
)
LIMIT 1
SQL
execute <<~SQL
DELETE FROM topic_custom_fields
WHERE name = 'is_welcome_topic' AND value = 'true'
SQL
# Lounge Welcome Topic
execute <<~SQL
INSERT INTO site_settings(name, data_type, value, created_at, updated_at)
SELECT 'lounge_welcome_topic_id', 3, id, created_at, updated_at
FROM topics
WHERE title = 'Welcome to the Lounge' AND NOT EXISTS(
SELECT 1
FROM site_settings
WHERE name = 'lounge_welcome_topic_id'
) AND category_id IN (
SELECT value::INT
FROM site_settings
WHERE name = 'lounge_category_id'
)
ORDER BY created_at
LIMIT 1
SQL
# Admin Quick Start Guide
execute <<~SQL
INSERT INTO site_settings(name, data_type, value, created_at, updated_at)
SELECT 'admin_quick_start_topic_id', 3, id, created_at, updated_at
FROM topics
WHERE title IN ('READ ME FIRST: Admin Quick Start Guide', 'READ ME FIRST: Getting Started') AND NOT EXISTS(
SELECT 1
FROM site_settings
WHERE name = 'admin_quick_start_topic_id'
)
ORDER BY created_at
LIMIT 1
SQL
end
def down
execute <<~SQL
INSERT INTO topic_custom_fields(topic_id, name, value, created_at, updated_at)
SELECT value::INTEGER, 'is_welcome_topic', 'true', created_at, updated_at
FROM site_settings
WHERE name = 'welcome_topic_id'
SQL
execute <<~SQL
DELETE FROM site_settings
WHERE name IN ('welcome_topic_id', 'lounge_welcome_topic_id', 'admin_quick_start_topic_id')
SQL
end
end