FactuGES_ERP/apps/server/src/lib/modules/model-loader.ts

56 lines
1.6 KiB
TypeScript
Raw Normal View History

2025-05-09 10:45:32 +00:00
import { ModuleParams } from "@erp/core";
import { logger } from "../logger";
2025-05-04 20:06:57 +00:00
const allModelInitializers: any[] = [];
const registeredModels: { [key: string]: any } = {};
/**
* 🔹 Registra todos los modelos en Sequelize
*/
export const registerModels = (models: any[], params?: ModuleParams) => {
allModelInitializers.push(...models);
};
export const initModels = async (params: ModuleParams) => {
2025-05-09 10:45:32 +00:00
logger.info("Init models...", { label: "initModels" });
2025-05-04 20:06:57 +00:00
const { database } = params;
if (!database) {
const error = new Error("❌ Database not found.");
2025-05-09 10:45:32 +00:00
logger.error(error.message, {
2025-05-04 20:06:57 +00:00
label: "initModels",
});
throw error;
}
// Inicializar modelos
for (const initializer of allModelInitializers) {
const model = initializer(database);
registeredModels[model.name] = model;
2025-05-09 10:45:32 +00:00
logger.info(`🔸 Model "${model.name}" registered (sequelize)`, { label: "registerModel" });
2025-05-04 20:06:57 +00:00
}
// Configurar asociaciones
for (const model of Object.values(registeredModels)) {
if (typeof model.associate === "function") {
model.associate(database);
}
}
try {
// Sincronizamos DB en modo desarrollo
if (process.env.NODE_ENV !== "production") {
await database.sync({ force: false, alter: true });
2025-05-09 10:45:32 +00:00
logger.info(`✔️${" "}Database synchronized successfully.`, { label: "initModels" });
2025-05-04 20:06:57 +00:00
} else {
2025-05-09 10:45:32 +00:00
logger.warn("⚠️ Running in production mode - Skipping database sync.", {
2025-05-04 20:06:57 +00:00
label: "initModels",
});
}
} catch (err) {
const error = err as Error;
2025-05-09 10:45:32 +00:00
logger.error("❌ Error synchronizing database:", { error, label: "initModels" });
2025-05-04 20:06:57 +00:00
throw error;
}
};