dragonroll/backend/services/datagen.js
BinarySandia04 2a12f70c91
Some checks failed
test / run-tests-client (push) Successful in 46s
test / run-tests-backend (push) Failing after 15s
Datagen is generated inside convinient mongodb schemas
2024-10-21 17:27:23 +02:00

72 lines
2.5 KiB
JavaScript

const fs = require('fs');
const { default: mongoose } = require('mongoose');
const path = require('path');
const basePath = path.resolve(__dirname, '../')
const DatagenCollection = require("../models/DatagenCollection");
const DatagenEntry = require('../models/DatagenEntry');
async function datagenTask(models) {
console.log("Inicializing datagen task");
await DatagenCollection.deleteMany({});
await DatagenEntry.deleteMany({});
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...?
const datagenCollection = await DatagenCollection.create({
name: info.name,
id: info.id,
desc: info.desc,
package: info.package
});
const modelNames = models[info.package].modelNames;
modelNames.forEach(modelName => {
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;
jsonFiles.forEach(file => {
if(fs.lstatSync(modelPath + "/" + file).isFile()){
appendDatagen(modelPath + "/" + file, modelName, info, datagenCollection);
}
})
}
}
})
}
async function appendDatagen(file, modelName, info, datagenCollection){
// "Appending " + file + " to model " + modelName + " from " + info.id + " for package " + info.package
let fileData = JSON.parse(fs.readFileSync(file));
await DatagenEntry.create({
id: fileData.id,
data: fileData.value,
schema: modelName,
datagen_collection: datagenCollection
});
}
module.exports = {
datagenTask
}