mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-11-28 05:37:34 +03:00
🏗️ 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:
parent
f50c25d63c
commit
8d02752802
@ -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');
|
||||
}
|
||||
);
|
@ -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();
|
||||
}
|
||||
);
|
Loading…
Reference in New Issue
Block a user