mirror of
https://github.com/strapi/strapi.git
synced 2025-07-23 09:00:19 +00:00
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
const { isScalarAttribute } = require('@strapi/utils').contentTypes;
|
|
const { pick, prop, map, intersection, isEmpty, orderBy, pipe, every } = require('lodash/fp');
|
|
const { getService } = require('../../utils');
|
|
|
|
const shouldBeProcessed = processedLocaleCodes => entry => {
|
|
return (
|
|
entry.localizations.length > 0 &&
|
|
intersection(entry.localizations.map(prop('locale')), processedLocaleCodes).length === 0
|
|
);
|
|
};
|
|
|
|
const getUpdatesInfo = ({ entriesToProcess, attributesToMigrate }) => {
|
|
const updates = [];
|
|
for (const entry of entriesToProcess) {
|
|
const attributesValues = pick(attributesToMigrate, entry);
|
|
const entriesIdsToUpdate = entry.localizations.map(prop('id'));
|
|
updates.push({ entriesIdsToUpdate, attributesValues });
|
|
}
|
|
return updates;
|
|
};
|
|
|
|
const getSortedLocales = async ({ transacting } = {}) => {
|
|
const localeService = getService('locales');
|
|
|
|
let defaultLocale;
|
|
try {
|
|
const storeRes = await strapi
|
|
.query('strapi::core-store')
|
|
.findOne({ key: 'plugin_i18n_default_locale' }, null, { transacting });
|
|
defaultLocale = JSON.parse(storeRes.value);
|
|
} catch (e) {
|
|
throw new Error("Could not migrate because the default locale doesn't exist");
|
|
}
|
|
|
|
const locales = await localeService.find({}, null, { transacting });
|
|
if (isEmpty(locales)) {
|
|
throw new Error('Could not migrate because no locale exist');
|
|
}
|
|
|
|
// Put default locale first
|
|
return pipe(
|
|
map(locale => ({ code: locale.code, isDefault: locale.code === defaultLocale })),
|
|
orderBy(['isDefault', 'code'], ['desc', 'asc']),
|
|
map(prop('code'))
|
|
)(locales);
|
|
};
|
|
|
|
const areScalarAttributesOnly = ({ model, attributes }) =>
|
|
pipe(pick(attributes), every(isScalarAttribute))(model.attributes);
|
|
|
|
module.exports = {
|
|
shouldBeProcessed,
|
|
getUpdatesInfo,
|
|
getSortedLocales,
|
|
areScalarAttributesOnly,
|
|
};
|