import dotenv from 'dotenv'; dotenv.config({ override: true }); // API_KEY = DUMUqJrNeyuaPDSZSsMf91qjgwc5K3N7 import express from 'express'; import cors from 'cors'; import helmet from 'helmet'; import { errorHandler } from './middleware/error'; import { requireApiKey } from './middleware/auth'; // Import routers import identityRouter from './modules/identity/router'; import catalogueRouter from './modules/catalogue/router'; import inventoryRouter from './modules/inventory/router'; import dispensingRouter from './modules/dispensing/router'; import auditRouter from './modules/audit/router'; import prescriptionRouter from './modules/prescription/router'; import aiRouter from './modules/ai/router'; import integrationRouter from './modules/integration/router'; import uploadRouter from './modules/upload/router'; const app = express(); const PORT = process.env.PORT || 8080; app.use(helmet()); app.use(cors()); app.use(express.json()); // Detailed Network Logger Middleware app.use((req, res, next) => { const start = Date.now(); console.log(`\n======================================================`); console.log(`[NETWORK REQUEST] ${req.method} ${req.originalUrl}`); console.log(`[HEADERS]`, JSON.stringify(req.headers, null, 2)); if (req.body && Object.keys(req.body).length > 0) { console.log(`[BODY]`, JSON.stringify(req.body, null, 2)); } res.on('finish', () => { const duration = Date.now() - start; console.log(`[NETWORK RESPONSE] ${req.method} ${req.originalUrl} - Status: ${res.statusCode} (${duration}ms)`); console.log(`======================================================\n`); }); next(); }); // Global API Key Check app.use(requireApiKey); // API Routes app.use('/v1/auth', identityRouter); app.use('/v1', catalogueRouter); app.use('/v1/inventory', inventoryRouter); app.use('/v1/orders', dispensingRouter); app.use('/v1/audit', auditRouter); app.use('/v1/rx', prescriptionRouter); app.use('/v1/prescriptions', prescriptionRouter); app.use('/v1/ai', aiRouter); app.use('/v1/integration', integrationRouter); app.use('/v1/patients', integrationRouter); app.use('/v1/upload', uploadRouter); // Health check app.get('/health', (req, res) => { res.status(200).json({ status: 'ok' }); }); // Global Error Handler app.use(errorHandler); import { seedAllExistingTenants } from './db/seedTenant'; app.listen(PORT, () => { console.log(`Pharmacy Core API listening on port ${PORT}`); seedAllExistingTenants().catch(err => console.error('Error seeding existing tenants on startup:', err)); });