Datagen loads files, remains register to custom models to mongodb
Some checks failed
test / run-tests-client (push) Successful in 45s
test / run-tests-backend (push) Failing after 16s

This commit is contained in:
BinarySandia04 2024-10-19 14:20:21 +02:00
parent 89c33d397f
commit 1e4072dae6
21 changed files with 132 additions and 4 deletions

1
.gitignore vendored
View File

@ -15,6 +15,7 @@ client/public/plugins/
# Backend
backend/plugins/
backend/datagen/
# Docs
documentation/docs/.vuepress/.cache

View File

@ -13,18 +13,20 @@ class BackendApi {
#_router;
#_expressRouter;
#_internalSocket;
#_datagenRegisrty;
#_socket;
/**
* This object is already created for you
* @param {plugin} Plugin instance
*/
constructor(plugin, router, internalSocket){
constructor(plugin, router, internalSocket, datagenRegistry){
this.#_plugin = plugin;
this.#_expressRouter = router;
this.#_internalSocket = internalSocket;
this.#_socket = new BackendSocket(`plugins/${plugin.package}`, internalSocket);
this.#_router = new BackendRouter(`${plugin.package}`, this.#_expressRouter);
this.#_datagenRegisrty = datagenRegistry;
}
/**
@ -63,6 +65,10 @@ class BackendApi {
createModule(id){
return new BackendModule(this.#_plugin, id, this.#_expressRouter, this.#_internalSocket);
}
registerDatagen(model){
this.#_datagenRegisrty.modelNames.push(model.mongoName);
}
};
/**
@ -289,6 +295,10 @@ class BackendModel {
get mongoSchema() {
return this.#_mongoSchema;
}
get mongoName(){
return `${this.#_prefix}/${this.#_name}`
}
};
class BackendSocket {

View File

@ -0,0 +1,53 @@
const fs = require('fs');
const { default: mongoose } = require('mongoose');
const path = require('path');
const basePath = path.resolve(__dirname, '../')
async function datagenTask(models) {
console.log("Inicializing datagen task");
const datagenPluginFolders = fs.readdirSync(path.resolve(basePath + '/datagen'));
datagenPluginFolders.forEach(datagenPluginFolder => {
const datagenFolders = fs.readdirSync(path.resolve(basePath + '/datagen/' + datagenPluginFolder));
datagenFolders.forEach(datagenFolder => {
console.log(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 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);
}
})
}
}
})
}
async function appendDatagen(file, modelName, info){
// "Appending " + file + " to model " + modelName + " from " + info.id + " for package " + info.package
}
module.exports = {
datagenTask
}

View File

@ -1,18 +1,19 @@
const fs = require('fs');
const path = require('path')
const path = require('path');
const BackendApi = require('./api').BackendApi
const express = require('express');
const { getIo } = require('../io/socket');
const { datagenTask } = require('./datagen');
const router = express.Router({
mergeParams: true
});
const basePath = path.resolve(__dirname, '../')
console.log(basePath)
let pluginsInfo = [];
let plugins = {};
let internalSocket = {};
let datagenRegistry = {};
function init(){
console.log("Initializing plugins");
@ -31,10 +32,13 @@ function init(){
// Execute main
Object.keys(plugins).forEach(k => {
let pluginApi = new BackendApi(plugins[k].info, router, internalSocket);
datagenRegistry[k] = {modelNames: []};
let pluginApi = new BackendApi(plugins[k].info, router, internalSocket, datagenRegistry[k]);
plugins[k].payload.Main(pluginApi);
});
datagenTask(datagenRegistry);
console.log(internalSocket);
getIo().on('connect', (socket) => {
Object.keys(internalSocket).forEach(k => {

View File

@ -8,6 +8,7 @@ import * as _Tooltip from "@/services/Tooltip"
import * as _Windows from "@/services/Windows"
import Server from '@/services/Server';
import { socket } from '@/services/Socket';
const { t } = useI18n()
/**
* Class for managing the client api
@ -75,6 +76,10 @@ class ClientApi {
_Windows.ClearWindow(id);
}
t(key){
return t(`plugins.${plugin.package}.${key}`);
}
/**
* Returns the client router
* @type {ClientRouter}

View File

@ -84,6 +84,13 @@ function Main(api){
dndModule.createModelRoutes(effectsModel);
dndModule.createModelRoutes(entityModel);
Api.registerDatagen(itemModel);
Api.registerDatagen(monsterModel);
Api.registerDatagen(actorModel);
Api.registerDatagen(tableModel);
Api.registerDatagen(progressableModel);
Api.registerDatagen(effectsModel);
// Api.socket.on("test", () => console.log("test"));
// Api.router.createModelRoutes(itemModel, 'item');
}

View File

@ -0,0 +1,3 @@
{
}

View File

@ -0,0 +1,3 @@
{
}

View File

@ -0,0 +1,3 @@
{
}

View File

@ -0,0 +1,3 @@
{
}

View File

@ -0,0 +1,3 @@
{
}

View File

@ -0,0 +1,3 @@
{
}

View File

@ -1,5 +1,6 @@
{
"package": "dnd-5e",
"id": "dnd-5e-base",
"name": "info.name",
"desc": "info.description"
}

View File

@ -88,23 +88,34 @@ for(let i = 0; i < locales.length; i++){
console.log("Updated Locales")
// #endregion
// #region plugins
for(let j = 0; j < plugins.length; j++){
// Cient scripts and views
if(fs.existsSync(`./plugins/${plugins[j]}/client/`)){
fs.cpSync(`./plugins/${plugins[j]}/client/`, `./client/plugins/${plugins[j]}`, {recursive: true});
fs.copyFileSync(`./plugins/${plugins[j]}/plugin.json`, `./client/plugins/${plugins[j]}/plugin.json`);
}
// Backend scripts
if(fs.existsSync(`./plugins/${plugins[j]}/backend/`)){
fs.cpSync(`./plugins/${plugins[j]}/backend/`, `./backend/plugins/${plugins[j]}`, {recursive: true});
fs.copyFileSync(`./plugins/${plugins[j]}/plugin.json`, `./backend/plugins/${plugins[j]}/plugin.json`);
}
// Public folder
if(fs.existsSync(`./plugins/${plugins[j]}/public/`)){
fs.cpSync(`./plugins/${plugins[j]}/public/`, `./client/public/plugins/${plugins[j]}`, {recursive: true});
}
// Datagen
if(fs.existsSync(`./plugins/${plugins[j]}/datagen`)){
fs.readdirSync(`./plugins/${plugins[j]}/datagen`).forEach(d => {
fs.cpSync(`./plugins/${plugins[j]}/datagen/${d}`, `./backend/datagen/${plugins[j]}/${d}`, {recursive: true});
})
}
}
fs.writeFileSync(outputPath, JSON.stringify({