mirror of
https://github.com/strapi/strapi.git
synced 2025-07-21 07:57:45 +00:00
61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
const _ = require('lodash');
|
|
|
|
const createErrorMessage = (
|
|
modelA,
|
|
modelB
|
|
) => `Duplicated collection name: \`${modelA.model.collectionName}\`.
|
|
The same collection name can't be used for two different models.
|
|
First found in ${modelA.origin} \`${modelA.apiOrPluginName}\`, model \`${modelA.modelName}\`.
|
|
Second found in ${modelB.origin} \`${modelB.apiOrPluginName}\`, model \`${modelB.modelName}\`.`;
|
|
|
|
// Check if all collection names are unique
|
|
const checkDuplicatedTableNames = ({ strapi }) => {
|
|
const modelsWithInfo = [];
|
|
_.forIn(strapi.admin.models, (model, modelName) => {
|
|
modelsWithInfo.push({
|
|
origin: 'Strapi internal',
|
|
model,
|
|
apiOrPluginName: 'admin',
|
|
modelName,
|
|
});
|
|
});
|
|
|
|
_.forIn(strapi.api, (api, apiName) => {
|
|
_.forIn(api.models, (model, modelName) => {
|
|
modelsWithInfo.push({
|
|
origin: 'API',
|
|
model,
|
|
apiOrPluginName: apiName,
|
|
modelName,
|
|
});
|
|
});
|
|
});
|
|
|
|
_.forIn(strapi.plugins, (plugin, pluginName) => {
|
|
_.forIn(plugin.models, (model, modelName) => {
|
|
modelsWithInfo.push({
|
|
origin: 'Plugin',
|
|
model,
|
|
apiOrPluginName: pluginName,
|
|
modelName,
|
|
});
|
|
});
|
|
});
|
|
|
|
modelsWithInfo.forEach(modelA => {
|
|
const similarModelFound = modelsWithInfo.find(
|
|
modelB =>
|
|
modelB.model.collectionName === modelA.model.collectionName &&
|
|
modelB.model.uid !== modelA.model.uid
|
|
);
|
|
|
|
if (similarModelFound) {
|
|
throw new Error(createErrorMessage(modelA, similarModelFound));
|
|
}
|
|
});
|
|
};
|
|
|
|
module.exports = checkDuplicatedTableNames;
|