49 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-09-07 15:04:20 +02:00
'use strict';
const _ = require('lodash');
const { contentTypes: contentTypesUtils } = require('strapi-utils');
2020-09-07 15:04:20 +02:00
const { PUBLISHED_AT_ATTRIBUTE } = contentTypesUtils.constants;
const getDraftAndPublishMigrationWay = async ({ definition, previousDefinition }) => {
const previousDraftAndPublish = contentTypesUtils.hasDraftAndPublish(previousDefinition);
2020-09-07 15:04:20 +02:00
const actualDraftAndPublish = contentTypesUtils.hasDraftAndPublish(definition);
if (!previousDefinition || previousDraftAndPublish === actualDraftAndPublish) {
2020-09-07 15:04:20 +02:00
return 'none';
}
if (!previousDraftAndPublish && actualDraftAndPublish) {
return 'enable';
}
if (previousDraftAndPublish && !actualDraftAndPublish) {
return 'disable';
}
};
const migrateDraftAndPublish = async ({ definition, previousDefinition, model }) => {
let way = await getDraftAndPublishMigrationWay({ definition, previousDefinition });
2020-09-07 15:04:20 +02:00
if (way === 'enable') {
const createdAtCol = _.get(definition, 'timestamps.createdAt', 'createdAt');
await model
.aggregate([
{
$addFields: {
[PUBLISHED_AT_ATTRIBUTE]: { $ifNull: [`$${createdAtCol}`, new Date()] },
2020-09-07 15:04:20 +02:00
},
},
{
$out: definition.collectionName,
},
])
.exec();
} else if (way === 'disable') {
await model.deleteMany({ [PUBLISHED_AT_ATTRIBUTE]: null });
await model.updateMany({}, { $unset: { [PUBLISHED_AT_ATTRIBUTE]: '' } }, { strict: false });
}
};
module.exports = {
before: migrateDraftAndPublish,
2020-09-07 15:04:20 +02:00
};