2024-10-19 12:20:21 +00:00
|
|
|
const fs = require('fs');
|
|
|
|
const { default: mongoose } = require('mongoose');
|
|
|
|
const path = require('path');
|
|
|
|
|
|
|
|
const basePath = path.resolve(__dirname, '../')
|
|
|
|
|
2024-10-21 15:27:23 +00:00
|
|
|
const DatagenCollection = require("../models/DatagenCollection");
|
|
|
|
const DatagenEntry = require('../models/DatagenEntry');
|
|
|
|
|
2024-10-19 12:20:21 +00:00
|
|
|
async function datagenTask(models) {
|
|
|
|
console.log("Inicializing datagen task");
|
|
|
|
|
2024-10-21 15:27:23 +00:00
|
|
|
await DatagenCollection.deleteMany({});
|
|
|
|
await DatagenEntry.deleteMany({});
|
|
|
|
|
2024-10-19 12:20:21 +00:00
|
|
|
const datagenPluginFolders = fs.readdirSync(path.resolve(basePath + '/datagen'));
|
|
|
|
datagenPluginFolders.forEach(datagenPluginFolder => {
|
|
|
|
const datagenFolders = fs.readdirSync(path.resolve(basePath + '/datagen/' + datagenPluginFolder));
|
|
|
|
datagenFolders.forEach(datagenFolder => {
|
|
|
|
let folder = basePath + '/datagen/' + datagenPluginFolder + "/" + datagenFolder;
|
|
|
|
const datagenInfo = JSON.parse(fs.readFileSync(
|
|
|
|
path.resolve(folder + "/datagen.json")
|
|
|
|
));
|
|
|
|
|
|
|
|
resolveDatagen(models, folder, datagenInfo);
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
|
|
|
console.log("Ended datagen task");
|
|
|
|
}
|
|
|
|
|
|
|
|
async function resolveDatagen(models, path, info){
|
|
|
|
// Do locale translation with info somewhere...?
|
2024-10-21 15:27:23 +00:00
|
|
|
const datagenCollection = await DatagenCollection.create({
|
2024-10-21 21:21:56 +00:00
|
|
|
name: info.name, // Display name?
|
|
|
|
id: info.id, // Internal id?
|
|
|
|
package: info.package, // From what plugin?
|
|
|
|
module: info.module, // What module is for?
|
2024-10-21 15:27:23 +00:00
|
|
|
desc: info.desc,
|
2024-10-21 21:21:56 +00:00
|
|
|
icon: info.icon,
|
2024-10-21 15:27:23 +00:00
|
|
|
});
|
|
|
|
|
2024-10-21 21:21:56 +00:00
|
|
|
const modelNames = models[info.module].modelNames;
|
|
|
|
for(let i = 0; i < modelNames.length; i++){
|
|
|
|
let modelName = modelNames[i];
|
2024-10-19 12:20:21 +00:00
|
|
|
if(Object.keys(mongoose.models).includes(modelName)){
|
|
|
|
let modelLastName = modelName.split('/').pop();
|
|
|
|
let modelDataPath = path + "/data/" + modelLastName;
|
|
|
|
if(fs.existsSync(modelDataPath)){
|
|
|
|
const jsonFiles = fs.readdirSync(path + "/data/" + modelLastName, {recursive: true});
|
|
|
|
let modelPath = path + "/data/" + modelLastName;
|
2024-10-21 21:21:56 +00:00
|
|
|
for(let j = 0; j < jsonFiles.length; j++){
|
|
|
|
let file = jsonFiles[j];
|
2024-10-19 12:20:21 +00:00
|
|
|
if(fs.lstatSync(modelPath + "/" + file).isFile()){
|
2024-10-21 21:21:56 +00:00
|
|
|
const newDatagen = await appendDatagen(modelPath + "/" + file, modelName, info, datagenCollection);
|
|
|
|
datagenCollection.entries.push(newDatagen._id);
|
2024-10-19 12:20:21 +00:00
|
|
|
}
|
2024-10-21 21:21:56 +00:00
|
|
|
}
|
2024-10-19 12:20:21 +00:00
|
|
|
}
|
|
|
|
}
|
2024-10-21 21:21:56 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
await datagenCollection.save();
|
2024-10-19 12:20:21 +00:00
|
|
|
}
|
|
|
|
|
2024-10-21 15:27:23 +00:00
|
|
|
async function appendDatagen(file, modelName, info, datagenCollection){
|
2024-10-19 12:20:21 +00:00
|
|
|
// "Appending " + file + " to model " + modelName + " from " + info.id + " for package " + info.package
|
2024-10-21 15:27:23 +00:00
|
|
|
let fileData = JSON.parse(fs.readFileSync(file));
|
2024-10-21 21:21:56 +00:00
|
|
|
return await DatagenEntry.create({
|
2024-10-21 15:27:23 +00:00
|
|
|
id: fileData.id,
|
|
|
|
data: fileData.value,
|
|
|
|
schema: modelName,
|
|
|
|
datagen_collection: datagenCollection
|
|
|
|
});
|
2024-10-19 12:20:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
datagenTask
|
|
|
|
}
|