148 lines
4.1 KiB
JavaScript
148 lines
4.1 KiB
JavaScript
import express from 'express';
|
|
import bodyParser from 'body-parser';
|
|
import cors from 'cors';
|
|
import config from './config.js';
|
|
import { expressSession, keycloak } from './keycloak.js';
|
|
import { dbConnect } from './database/mongo.js';
|
|
import {
|
|
authRoutes,
|
|
userRoutes,
|
|
fileRoutes,
|
|
printerRoutes,
|
|
jobRoutes,
|
|
subJobRoutes,
|
|
gcodeFileRoutes,
|
|
filamentRoutes,
|
|
spotlightRoutes,
|
|
partRoutes,
|
|
productRoutes,
|
|
vendorRoutes,
|
|
materialRoutes,
|
|
partStockRoutes,
|
|
filamentStockRoutes,
|
|
purchaseOrderRoutes,
|
|
orderItemRoutes,
|
|
shipmentRoutes,
|
|
stockAuditRoutes,
|
|
stockEventRoutes,
|
|
auditLogRoutes,
|
|
noteTypeRoutes,
|
|
noteRoutes,
|
|
hostRoutes,
|
|
documentSizesRoutes,
|
|
documentTemplatesRoutes,
|
|
documentPrintersRoutes,
|
|
documentJobsRoutes,
|
|
courierRoutes,
|
|
courierServiceRoutes,
|
|
taxRateRoutes,
|
|
taxRecordRoutes,
|
|
invoiceRoutes,
|
|
} from './routes/index.js';
|
|
import path from 'path';
|
|
import * as fs from 'fs';
|
|
import log4js from 'log4js';
|
|
import { populateUserMiddleware } from './services/misc/auth.js';
|
|
import { natsServer } from './database/nats.js';
|
|
import { initializeBuckets } from './database/ceph.js';
|
|
import { getEnvironment } from './config.js';
|
|
|
|
const PORT = config.server.port;
|
|
const app = express();
|
|
|
|
const logger = log4js.getLogger('App');
|
|
logger.level = config.server.logLevel;
|
|
|
|
app.use(log4js.connectLogger(logger, { level: 'trace' }));
|
|
|
|
const whitelist = [config.app.urlClient, config.app.urlElectronClient];
|
|
const corsOptions = {
|
|
origin: function (origin, callback) {
|
|
if (!origin || whitelist.indexOf(origin) !== -1) {
|
|
callback(null, true);
|
|
} else {
|
|
callback(new Error('Not allowed by CORS'));
|
|
}
|
|
},
|
|
credentials: true,
|
|
};
|
|
|
|
// Initialize application
|
|
async function initializeApp() {
|
|
logger.info('Initializing application...');
|
|
logger.info(`Environment: ${getEnvironment()}`);
|
|
logger.info(`Port: ${PORT}`);
|
|
logger.info(`Log Level: ${config.server.logLevel}`);
|
|
try {
|
|
// Connect to database
|
|
await dbConnect();
|
|
|
|
// Connect to NATS
|
|
await natsServer.connect();
|
|
|
|
// Initialize Ceph buckets
|
|
try {
|
|
await initializeBuckets();
|
|
} catch (err) {
|
|
logger.error('Failed to initialize Ceph buckets:', err);
|
|
// Don't throw error - allow app to start without Ceph for development
|
|
}
|
|
|
|
// Start server
|
|
app.listen(PORT, () => logger.info(`Server listening to port ${PORT}`));
|
|
} catch (err) {
|
|
logger.error('Failed to initialize application:', err);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// Configure middleware
|
|
app.use(cors(corsOptions));
|
|
app.use(bodyParser.json({ type: 'application/json', strict: false, limit: '50mb' }));
|
|
app.use(express.json());
|
|
app.use(expressSession);
|
|
app.use(keycloak.middleware());
|
|
app.use(populateUserMiddleware);
|
|
|
|
app.get('/', function (req, res) {
|
|
const __dirname = fs.realpathSync('.');
|
|
res.sendFile(path.join(__dirname, '/src/landing/index.html'));
|
|
});
|
|
|
|
app.use('/auth', authRoutes);
|
|
app.use('/users', userRoutes);
|
|
app.use('/files', fileRoutes);
|
|
app.use('/spotlight', spotlightRoutes);
|
|
app.use('/printers', printerRoutes);
|
|
app.use('/hosts', hostRoutes);
|
|
app.use('/jobs', jobRoutes);
|
|
app.use('/subjobs', subJobRoutes);
|
|
app.use('/gcodefiles', gcodeFileRoutes);
|
|
app.use('/filaments', filamentRoutes);
|
|
app.use('/parts', partRoutes);
|
|
app.use('/products', productRoutes);
|
|
app.use('/vendors', vendorRoutes);
|
|
app.use('/materials', materialRoutes);
|
|
app.use('/partstocks', partStockRoutes);
|
|
app.use('/filamentstocks', filamentStockRoutes);
|
|
app.use('/purchaseorders', purchaseOrderRoutes);
|
|
app.use('/orderitems', orderItemRoutes);
|
|
app.use('/shipments', shipmentRoutes);
|
|
app.use('/stockevents', stockEventRoutes);
|
|
app.use('/stockaudits', stockAuditRoutes);
|
|
app.use('/auditlogs', auditLogRoutes);
|
|
app.use('/notetypes', noteTypeRoutes);
|
|
app.use('/documentsizes', documentSizesRoutes);
|
|
app.use('/documenttemplates', documentTemplatesRoutes);
|
|
app.use('/documentprinters', documentPrintersRoutes);
|
|
app.use('/documentjobs', documentJobsRoutes);
|
|
app.use('/couriers', courierRoutes);
|
|
app.use('/courierservices', courierServiceRoutes);
|
|
app.use('/taxrates', taxRateRoutes);
|
|
app.use('/taxrecords', taxRecordRoutes);
|
|
app.use('/invoices', invoiceRoutes);
|
|
app.use('/notes', noteRoutes);
|
|
|
|
// Start the application
|
|
initializeApp();
|