erp-construccion-backend/dist/server.js
rckrdmrd 9bddee7320 chore: Remove dist/ from git tracking (now in .gitignore)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 11:47:55 -06:00

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