mirror of
https://github.com/strapi/strapi.git
synced 2025-08-08 00:37:38 +00:00

* fix alter-column db migration Signed-off-by: Pierre Noël <petersg83@gmail.com> * refacto of data migration + fix sqlite dp migration Signed-off-by: Pierre Noël <petersg83@gmail.com> * refacto create-migration-runner Signed-off-by: Pierre Noël <petersg83@gmail.com> * fix migration Signed-off-by: Pierre Noël <petersg83@gmail.com> * refacto Signed-off-by: Pierre Noël <petersg83@gmail.com>
70 lines
2.2 KiB
JavaScript
70 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
const _ = require('lodash');
|
|
const { contentTypes: contentTypesUtils } = require('strapi-utils');
|
|
const { PUBLISHED_AT_ATTRIBUTE } = contentTypesUtils.constants;
|
|
const { getDefinitionFromStore } = require('../utils/store-definition');
|
|
|
|
const getDraftAndPublishMigrationWay = async ({ definition, ORM }) => {
|
|
const previousDefRow = await getDefinitionFromStore(definition, ORM);
|
|
const previousDef = JSON.parse(_.get(previousDefRow, 'value', null));
|
|
const previousDraftAndPublish = contentTypesUtils.hasDraftAndPublish(previousDef);
|
|
const actualDraftAndPublish = contentTypesUtils.hasDraftAndPublish(definition);
|
|
|
|
if (previousDraftAndPublish === actualDraftAndPublish) {
|
|
return 'none';
|
|
}
|
|
if (!previousDraftAndPublish && actualDraftAndPublish) {
|
|
return 'enable';
|
|
}
|
|
if (previousDraftAndPublish && !actualDraftAndPublish) {
|
|
return 'disable';
|
|
}
|
|
};
|
|
|
|
const before = async ({ definition, ORM }) => {
|
|
const way = await getDraftAndPublishMigrationWay({ definition, ORM });
|
|
|
|
if (way === 'disable') {
|
|
const publishedAtColumnExists = await ORM.knex.schema.hasColumn(
|
|
definition.collectionName,
|
|
PUBLISHED_AT_ATTRIBUTE
|
|
);
|
|
|
|
if (publishedAtColumnExists) {
|
|
await ORM.knex(definition.collectionName)
|
|
.delete()
|
|
.where(PUBLISHED_AT_ATTRIBUTE, null);
|
|
|
|
await ORM.knex.schema.table(definition.collectionName, table => {
|
|
table.dropColumn(PUBLISHED_AT_ATTRIBUTE);
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
const after = async ({ definition, ORM }) => {
|
|
const way = await getDraftAndPublishMigrationWay({ definition, ORM });
|
|
|
|
if (way === 'enable') {
|
|
const now = new Date();
|
|
let publishedAtValue = now;
|
|
if (_.get(definition, 'options.timestamps', false)) {
|
|
const createdAtColumn = _.get(definition, 'options.timestamps.0', 'created_at');
|
|
publishedAtValue = ORM.knex.ref(createdAtColumn);
|
|
}
|
|
await ORM.knex(definition.collectionName)
|
|
.update({ [PUBLISHED_AT_ATTRIBUTE]: publishedAtValue })
|
|
.where(PUBLISHED_AT_ATTRIBUTE, null);
|
|
|
|
await ORM.knex(definition.collectionName) // in case some created_at were null
|
|
.update({ [PUBLISHED_AT_ATTRIBUTE]: now })
|
|
.where(PUBLISHED_AT_ATTRIBUTE, null);
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
before,
|
|
after,
|
|
};
|