2025-05-28 14:21:09 +00:00
|
|
|
import { ModuleParams } from "@erp/core/api";
|
2025-05-09 10:45:32 +00:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
};
|