UNPKG

ghost

Version:

The professional publishing platform

45 lines (37 loc) 1.7 kB
const logging = require('@tryghost/logging'); const {createTransactionalMigration} = require('../../utils'); module.exports = createTransactionalMigration( async function up(knex) { logging.info('Linking existing emails and related posts to the default newsletter'); // Get the default newsletter // Note we intentionally use the default newsletter slug instead of the usual orderBy logic let newsletter = await knex('newsletters') .where('slug', 'default-newsletter') .first('id', 'slug'); if (!newsletter) { // Fall back to orderBy - just in case logging.warn(`Original default newsletter not found - using first in sort order`); newsletter = await knex('newsletters') .where('status', 'active') .orderBy('sort_order', 'asc') .orderBy('created_at', 'asc') .orderBy('id', 'asc') .first('id', 'slug'); } if (!newsletter) { logging.error(`Newsletter not found - skipping`); return; } logging.info(`Assigning existing emails to newsletter ID ${newsletter.id} (${newsletter.slug})`); // Set newsletter ID only on posts with related email records without a newsletter assigned await knex('posts') .update('newsletter_id', newsletter.id) .whereIn('id', knex.raw('SELECT post_id FROM emails WHERE emails.newsletter_id IS NULL')); await knex('emails') .update('newsletter_id', newsletter.id) .whereNull('newsletter_id'); }, async function down() { // Not required } );