strapi-plugin-config-sync/controllers/config.js

97 lines
2.6 KiB
JavaScript

'use strict';
const fs = require('fs');
/**
* Main controllers for config import/export.
*/
module.exports = {
/**
* Export all config, from db to filesystem.
*
* @param {object} ctx - Request context object.
* @returns {void}
*/
exportAll: async (ctx) => {
await strapi.plugins['config-sync'].services.main.exportAllConfig();
ctx.send({
message: `Config was successfully exported to ${strapi.plugins['config-sync'].config.destination}.`
});
},
/**
* Import all config, from filesystem to db.
*
* @param {object} ctx - Request context object.
* @returns {void}
*/
importAll: async (ctx) => {
// Check for existance of the config file destination dir.
if (!fs.existsSync(strapi.plugins['config-sync'].config.destination)) {
ctx.send({
message: 'No config files were found.'
});
return;
}
await strapi.plugins['config-sync'].services.main.importAllConfig();
ctx.send({
message: 'Config was successfully imported.'
});
},
/**
* Get all configs as defined in your filesystem.
*
* @param {object} ctx - Request context object.
* @returns {object} Object with key value pairs of configs.
*/
getConfigsFromFiles: async (ctx) => {
// Check for existance of the config file destination dir.
if (!fs.existsSync(strapi.plugins['config-sync'].config.destination)) {
ctx.send({
message: 'No config files were found.'
});
return;
}
const configFiles = fs.readdirSync(strapi.plugins['config-sync'].config.destination);
let formattedConfigs = {};
const getConfigs = async () => {
return Promise.all(configFiles.map(async (file) => {
const formattedConfigName = file.slice(0, -5); // remove the .json extension.
const fileContents = await strapi.plugins['config-sync'].services.main.readConfigFile(formattedConfigName);
formattedConfigs[formattedConfigName] = fileContents;
}));
};
await getConfigs();
ctx.send(formattedConfigs);
},
/**
* Get all configs as defined in your database.
*
* @param {object} ctx - Request context object.
* @returns {object} Object with key value pairs of configs.
*/
getConfigsFromDatabase: async (ctx) => {
const coreStoreAPI = strapi.query('core_store');
const coreStore = await coreStoreAPI.find({ _limit: -1 });
let formattedConfigs = {};
Object.values(coreStore).map(async ({ key, value }) => {
formattedConfigs[key] = JSON.parse(value);
});
ctx.send(formattedConfigs);
}
};