299 lines
18 KiB
JavaScript
299 lines
18 KiB
JavaScript
"use strict";
|
|
/**
|
|
* Server Entry Point
|
|
* MVP Sistema Administración de Obra e INFONAVIT
|
|
*
|
|
* @author Backend-Agent
|
|
* @date 2025-11-20
|
|
*/
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
require("reflect-metadata");
|
|
const express_1 = __importDefault(require("express"));
|
|
const cors_1 = __importDefault(require("cors"));
|
|
const helmet_1 = __importDefault(require("helmet"));
|
|
const morgan_1 = __importDefault(require("morgan"));
|
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
const typeorm_config_1 = require("./shared/database/typeorm.config");
|
|
// Cargar variables de entorno
|
|
dotenv_1.default.config();
|
|
const app = (0, express_1.default)();
|
|
const PORT = process.env.APP_PORT || 3000;
|
|
const API_VERSION = process.env.API_VERSION || 'v1';
|
|
/**
|
|
* Middlewares
|
|
*/
|
|
app.use((0, helmet_1.default)()); // Seguridad HTTP headers
|
|
app.use((0, cors_1.default)({
|
|
origin: process.env.CORS_ORIGIN?.split(',') || '*',
|
|
credentials: process.env.CORS_CREDENTIALS === 'true',
|
|
}));
|
|
app.use((0, morgan_1.default)(process.env.LOG_FORMAT || 'dev')); // Logging
|
|
app.use(express_1.default.json()); // Parse JSON bodies
|
|
app.use(express_1.default.urlencoded({ extended: true })); // Parse URL-encoded bodies
|
|
/**
|
|
* Health Check
|
|
*/
|
|
app.get('/health', (_req, res) => {
|
|
res.status(200).json({
|
|
status: 'ok',
|
|
timestamp: new Date().toISOString(),
|
|
environment: process.env.NODE_ENV || 'development',
|
|
version: API_VERSION,
|
|
});
|
|
});
|
|
/**
|
|
* API Routes
|
|
*/
|
|
const controllers_1 = require("./modules/construction/controllers");
|
|
const auth_controller_1 = require("./modules/auth/controllers/auth.controller");
|
|
const users_controller_1 = require("./modules/users/controllers/users.controller");
|
|
const controllers_2 = require("./modules/budgets/controllers");
|
|
const controllers_3 = require("./modules/progress/controllers");
|
|
const controllers_4 = require("./modules/estimates/controllers");
|
|
const controllers_5 = require("./modules/hr/controllers");
|
|
const controllers_6 = require("./modules/hse/controllers");
|
|
const controllers_7 = require("./modules/inventory/controllers");
|
|
const controllers_8 = require("./modules/purchase/controllers");
|
|
const controllers_9 = require("./modules/infonavit/controllers");
|
|
const controllers_10 = require("./modules/quality/controllers");
|
|
const controllers_11 = require("./modules/contracts/controllers");
|
|
const controllers_12 = require("./modules/reports/controllers");
|
|
const controllers_13 = require("./modules/admin/controllers");
|
|
const controllers_14 = require("./modules/bidding/controllers");
|
|
// TEMPORARILY DISABLED - Finance module requires structural fixes
|
|
// import { createAccountingController, createAPController, createARController, createCashFlowController, createBankReconciliationController, createReportsController } from './modules/finance/controllers';
|
|
// Root API info
|
|
app.get(`/api/${API_VERSION}`, (_req, res) => {
|
|
res.status(200).json({
|
|
message: 'API MVP Sistema Administración de Obra',
|
|
version: API_VERSION,
|
|
endpoints: {
|
|
health: '/health',
|
|
docs: `/api/${API_VERSION}/docs`,
|
|
auth: `/api/${API_VERSION}/auth`,
|
|
users: `/api/${API_VERSION}/users`,
|
|
proyectos: `/api/${API_VERSION}/proyectos`,
|
|
fraccionamientos: `/api/${API_VERSION}/fraccionamientos`,
|
|
etapas: `/api/${API_VERSION}/etapas`,
|
|
manzanas: `/api/${API_VERSION}/manzanas`,
|
|
lotes: `/api/${API_VERSION}/lotes`,
|
|
prototipos: `/api/${API_VERSION}/prototipos`,
|
|
conceptos: `/api/${API_VERSION}/conceptos`,
|
|
presupuestos: `/api/${API_VERSION}/presupuestos`,
|
|
avances: `/api/${API_VERSION}/avances`,
|
|
bitacora: `/api/${API_VERSION}/bitacora`,
|
|
estimaciones: `/api/${API_VERSION}/estimaciones`,
|
|
anticipos: `/api/${API_VERSION}/anticipos`,
|
|
'fondos-garantia': `/api/${API_VERSION}/fondos-garantia`,
|
|
retenciones: `/api/${API_VERSION}/retenciones`,
|
|
puestos: `/api/${API_VERSION}/puestos`,
|
|
empleados: `/api/${API_VERSION}/empleados`,
|
|
capacitaciones: `/api/${API_VERSION}/capacitaciones`,
|
|
incidentes: `/api/${API_VERSION}/incidentes`,
|
|
requisiciones: `/api/${API_VERSION}/requisiciones`,
|
|
consumos: `/api/${API_VERSION}/consumos`,
|
|
comparativos: `/api/${API_VERSION}/comparativos`,
|
|
derechohabientes: `/api/${API_VERSION}/derechohabientes`,
|
|
asignaciones: `/api/${API_VERSION}/asignaciones`,
|
|
inspections: `/api/${API_VERSION}/inspections`,
|
|
tickets: `/api/${API_VERSION}/tickets`,
|
|
contracts: `/api/${API_VERSION}/contracts`,
|
|
subcontractors: `/api/${API_VERSION}/subcontractors`,
|
|
reports: `/api/${API_VERSION}/reports`,
|
|
dashboards: `/api/${API_VERSION}/dashboards`,
|
|
kpis: `/api/${API_VERSION}/kpis`,
|
|
'cost-centers': `/api/${API_VERSION}/cost-centers`,
|
|
'audit-logs': `/api/${API_VERSION}/audit-logs`,
|
|
settings: `/api/${API_VERSION}/settings`,
|
|
backups: `/api/${API_VERSION}/backups`,
|
|
opportunities: `/api/${API_VERSION}/opportunities`,
|
|
bids: `/api/${API_VERSION}/bids`,
|
|
'bid-budgets': `/api/${API_VERSION}/bid-budgets`,
|
|
'bid-analytics': `/api/${API_VERSION}/bid-analytics`,
|
|
accounting: `/api/${API_VERSION}/accounting`,
|
|
'accounts-payable': `/api/${API_VERSION}/accounts-payable`,
|
|
'accounts-receivable': `/api/${API_VERSION}/accounts-receivable`,
|
|
'cash-flow': `/api/${API_VERSION}/cash-flow`,
|
|
'bank-reconciliation': `/api/${API_VERSION}/bank-reconciliation`,
|
|
'financial-reports': `/api/${API_VERSION}/financial-reports`,
|
|
},
|
|
});
|
|
});
|
|
// Construction Module Routes
|
|
app.use(`/api/${API_VERSION}/proyectos`, controllers_1.proyectoController);
|
|
app.use(`/api/${API_VERSION}/fraccionamientos`, controllers_1.fraccionamientoController);
|
|
// Auth y Users Module Routes - Se inicializan después de la conexión a BD
|
|
let authController;
|
|
let usersController;
|
|
/**
|
|
* 404 Handler
|
|
*/
|
|
app.use((req, res) => {
|
|
res.status(404).json({
|
|
error: 'Not Found',
|
|
message: `Cannot ${req.method} ${req.path}`,
|
|
});
|
|
});
|
|
/**
|
|
* Error Handler
|
|
*/
|
|
app.use((err, _req, res, _next) => {
|
|
console.error('Error:', err);
|
|
res.status(500).json({
|
|
error: 'Internal Server Error',
|
|
message: process.env.NODE_ENV === 'development' ? err.message : 'Something went wrong',
|
|
});
|
|
});
|
|
/**
|
|
* Inicializar Base de Datos y Servidor
|
|
*/
|
|
async function bootstrap() {
|
|
try {
|
|
// Conectar a base de datos
|
|
console.log('🔌 Conectando a base de datos...');
|
|
await typeorm_config_1.AppDataSource.initialize();
|
|
console.log('✅ Base de datos conectada');
|
|
// Inicializar Auth Controller (requiere DataSource)
|
|
authController = (0, auth_controller_1.createAuthController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/auth`, authController);
|
|
console.log('🔐 Auth module inicializado');
|
|
// Inicializar Users Controller (requiere DataSource)
|
|
usersController = (0, users_controller_1.createUsersController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/users`, usersController);
|
|
console.log('👥 Users module inicializado');
|
|
// Inicializar Construction Controllers (requieren DataSource para auth)
|
|
const etapaController = (0, controllers_1.createEtapaController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/etapas`, etapaController);
|
|
const manzanaController = (0, controllers_1.createManzanaController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/manzanas`, manzanaController);
|
|
const loteController = (0, controllers_1.createLoteController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/lotes`, loteController);
|
|
const prototipoController = (0, controllers_1.createPrototipoController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/prototipos`, prototipoController);
|
|
console.log('🏗️ Construction module inicializado');
|
|
// Inicializar Budgets Controllers (requieren DataSource para auth)
|
|
const conceptoController = (0, controllers_2.createConceptoController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/conceptos`, conceptoController);
|
|
const presupuestoController = (0, controllers_2.createPresupuestoController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/presupuestos`, presupuestoController);
|
|
console.log('💰 Budgets module inicializado');
|
|
// Inicializar Progress Controllers (requieren DataSource para auth)
|
|
const avanceObraController = (0, controllers_3.createAvanceObraController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/avances`, avanceObraController);
|
|
const bitacoraObraController = (0, controllers_3.createBitacoraObraController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/bitacora`, bitacoraObraController);
|
|
console.log('📊 Progress module inicializado');
|
|
// Inicializar Estimates Controllers (requieren DataSource para auth)
|
|
const estimacionController = (0, controllers_4.createEstimacionController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/estimaciones`, estimacionController);
|
|
const anticipoController = (0, controllers_4.createAnticipoController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/anticipos`, anticipoController);
|
|
const fondoGarantiaController = (0, controllers_4.createFondoGarantiaController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/fondos-garantia`, fondoGarantiaController);
|
|
const retencionController = (0, controllers_4.createRetencionController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/retenciones`, retencionController);
|
|
console.log('📝 Estimates module inicializado');
|
|
// Inicializar HR Controllers (requieren DataSource para auth)
|
|
const puestoController = (0, controllers_5.createPuestoController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/puestos`, puestoController);
|
|
const employeeController = (0, controllers_5.createEmployeeController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/empleados`, employeeController);
|
|
console.log('👷 HR module inicializado');
|
|
// Inicializar HSE Controllers (requieren DataSource para auth)
|
|
const capacitacionController = (0, controllers_6.createCapacitacionController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/capacitaciones`, capacitacionController);
|
|
const incidenteController = (0, controllers_6.createIncidenteController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/incidentes`, incidenteController);
|
|
console.log('🦺 HSE module inicializado');
|
|
// Inicializar Inventory Controllers (requieren DataSource para auth)
|
|
const requisicionController = (0, controllers_7.createRequisicionController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/requisiciones`, requisicionController);
|
|
const consumoObraController = (0, controllers_7.createConsumoObraController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/consumos`, consumoObraController);
|
|
console.log('📦 Inventory module inicializado');
|
|
// Inicializar Purchase Controllers (requieren DataSource para auth)
|
|
const comparativoController = (0, controllers_8.createComparativoController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/comparativos`, comparativoController);
|
|
console.log('🛒 Purchase module inicializado');
|
|
// Inicializar Infonavit Controllers (requieren DataSource para auth)
|
|
const derechohabienteController = (0, controllers_9.createDerechohabienteController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/derechohabientes`, derechohabienteController);
|
|
const asignacionController = (0, controllers_9.createAsignacionController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/asignaciones`, asignacionController);
|
|
console.log('🏠 Infonavit module inicializado');
|
|
// Inicializar Quality Controllers (requieren DataSource para auth)
|
|
const inspectionController = (0, controllers_10.createInspectionController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/inspections`, inspectionController);
|
|
const ticketController = (0, controllers_10.createTicketController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/tickets`, ticketController);
|
|
console.log('✅ Quality module inicializado');
|
|
// Inicializar Contracts Controllers (requieren DataSource para auth)
|
|
const contractController = (0, controllers_11.createContractController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/contracts`, contractController);
|
|
const subcontractorController = (0, controllers_11.createSubcontractorController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/subcontractors`, subcontractorController);
|
|
console.log('📄 Contracts module inicializado');
|
|
// Inicializar Reports Controllers (requieren DataSource para auth)
|
|
const reportController = (0, controllers_12.createReportController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/reports`, reportController);
|
|
const dashboardController = (0, controllers_12.createDashboardController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/dashboards`, dashboardController);
|
|
const kpiController = (0, controllers_12.createKpiController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/kpis`, kpiController);
|
|
console.log('📈 Reports module inicializado');
|
|
// Inicializar Admin Controllers (requieren DataSource para auth)
|
|
const costCenterController = (0, controllers_13.createCostCenterController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/cost-centers`, costCenterController);
|
|
const auditLogController = (0, controllers_13.createAuditLogController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/audit-logs`, auditLogController);
|
|
const systemSettingController = (0, controllers_13.createSystemSettingController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/settings`, systemSettingController);
|
|
const backupController = (0, controllers_13.createBackupController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/backups`, backupController);
|
|
console.log('⚙️ Admin module inicializado');
|
|
// Inicializar Bidding Controllers (requieren DataSource para auth)
|
|
const opportunityController = (0, controllers_14.createOpportunityController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/opportunities`, opportunityController);
|
|
const bidController = (0, controllers_14.createBidController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/bids`, bidController);
|
|
const bidBudgetController = (0, controllers_14.createBidBudgetController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/bid-budgets`, bidBudgetController);
|
|
const bidAnalyticsController = (0, controllers_14.createBidAnalyticsController)(typeorm_config_1.AppDataSource);
|
|
app.use(`/api/${API_VERSION}/bid-analytics`, bidAnalyticsController);
|
|
console.log('📋 Bidding module inicializado');
|
|
// TEMPORARILY DISABLED - Finance module requires structural fixes
|
|
// Inicializar Finance Controllers (requieren DataSource para auth)
|
|
// const accountingController = createAccountingController(AppDataSource);
|
|
// app.use(`/api/${API_VERSION}/accounting`, accountingController);
|
|
// const apController = createAPController(AppDataSource);
|
|
// app.use(`/api/${API_VERSION}/accounts-payable`, apController);
|
|
// const arController = createARController(AppDataSource);
|
|
// app.use(`/api/${API_VERSION}/accounts-receivable`, arController);
|
|
// const cashFlowController = createCashFlowController(AppDataSource);
|
|
// app.use(`/api/${API_VERSION}/cash-flow`, cashFlowController);
|
|
// const bankReconciliationController = createBankReconciliationController(AppDataSource);
|
|
// app.use(`/api/${API_VERSION}/bank-reconciliation`, bankReconciliationController);
|
|
// const financialReportsController = createReportsController(AppDataSource);
|
|
// app.use(`/api/${API_VERSION}/financial-reports`, financialReportsController);
|
|
console.log('💵 Finance module DISABLED - pending structural fixes');
|
|
// Iniciar servidor
|
|
app.listen(PORT, () => {
|
|
console.log('🚀 Servidor iniciado');
|
|
console.log(`📍 URL: http://localhost:${PORT}`);
|
|
console.log(`📍 API: http://localhost:${PORT}/api/${API_VERSION}`);
|
|
console.log(`📍 Health: http://localhost:${PORT}/health`);
|
|
console.log(`🌍 Entorno: ${process.env.NODE_ENV || 'development'}`);
|
|
});
|
|
}
|
|
catch (error) {
|
|
console.error('❌ Error al iniciar servidor:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
// Iniciar aplicación
|
|
bootstrap();
|
|
exports.default = app;
|
|
//# sourceMappingURL=server.js.map
|