Files
AI_Pharmacy_Api/src/index.ts
T

77 lines
2.5 KiB
TypeScript

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));
});