🏗️ Repopulate featured collection records

refs https://github.com/TryGhost/Arch/issues/95
refs 00e5f84d88

- Maintaining "latest" collection's static content is causing performance issues we are not able to overcome in a short period of time. Instead we leave it as a "dynamic" collection, which equals the contents of the Posts API. The "featured" collection will be saved in a "static" form as previously.
- This is roughly the same migration as in 5.64 version (see refed commit). It wipes out all of the stored collections data and only populates the featured collection.
This commit is contained in:
Naz 2023-09-22 14:56:43 +08:00 committed by naz
parent f50c25d63c
commit 8d02752802
2 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,12 @@
const logging = require('@tryghost/logging');
const {createNonTransactionalMigration} = require('../../utils');
module.exports = createNonTransactionalMigration(
async function up(knex) {
logging.info('Clearing collections_posts table');
await knex('collections_posts').truncate();
},
async function down() {
logging.info('Not doing anything - collections_posts table has been truncated');
}
);

View File

@ -0,0 +1,49 @@
const logging = require('@tryghost/logging');
const {default: ObjectID} = require('bson-objectid');
const {createTransactionalMigration} = require('../../utils');
const insertPostCollections = async (knex, collectionId, postIds) => {
logging.warn(`Batch inserting ${postIds.length} collection posts for collection ${collectionId}`);
const collectionPosts = postIds.map((postId) => {
return {
id: (new ObjectID()).toHexString(),
collection_id: collectionId,
post_id: postId,
sort_order: 0
};
});
await knex.batchInsert('collections_posts', collectionPosts, 1000);
};
module.exports = createTransactionalMigration(
async function up(knex) {
logging.info('Populating built-in featured collection');
const existingFeaturedCollection = await knex('collections')
.where({
slug: 'featured'
})
.first();
if (!existingFeaturedCollection) {
logging.warn('Featured collection does not exist, skipping');
} else {
const featuredPostsRows = await knex('posts')
.select('id')
.where({
featured: true,
type: 'post'
});
const featuredPostsIds = featuredPostsRows.map(row => row.id);
await insertPostCollections(knex, existingFeaturedCollection.id, featuredPostsIds);
}
},
async function down(knex) {
logging.info('Clearing collections_posts table');
await knex('collections_posts').truncate();
}
);