refactoring 1. step
This commit is contained in:
91
src/index.js
Normal file
91
src/index.js
Normal file
@@ -0,0 +1,91 @@
|
||||
/**
|
||||
* Quote & Invoice System - Main Entry Point
|
||||
* Modularized Backend
|
||||
*/
|
||||
const express = require('express');
|
||||
const puppeteer = require('puppeteer');
|
||||
|
||||
// Import routes
|
||||
const customerRoutes = require('./routes/customers');
|
||||
const quoteRoutes = require('./routes/quotes');
|
||||
const invoiceRoutes = require('./routes/invoices');
|
||||
const paymentRoutes = require('./routes/payments');
|
||||
const qboRoutes = require('./routes/qbo');
|
||||
const settingsRoutes = require('./routes/settings');
|
||||
|
||||
// Import PDF service for browser initialization
|
||||
const { setBrowser } = require('./services/pdf-service');
|
||||
|
||||
const app = express();
|
||||
const PORT = process.env.PORT || 3000;
|
||||
|
||||
// Global browser instance
|
||||
let browser = null;
|
||||
|
||||
// Initialize browser on startup
|
||||
async function initBrowser() {
|
||||
if (!browser) {
|
||||
console.log('[BROWSER] Launching persistent browser...');
|
||||
browser = await puppeteer.launch({
|
||||
headless: 'new',
|
||||
args: [
|
||||
'--no-sandbox',
|
||||
'--disable-setuid-sandbox',
|
||||
'--disable-dev-shm-usage',
|
||||
'--disable-gpu',
|
||||
'--disable-software-rasterizer',
|
||||
'--no-zygote',
|
||||
'--single-process'
|
||||
],
|
||||
protocolTimeout: 180000,
|
||||
timeout: 180000
|
||||
});
|
||||
console.log('[BROWSER] Browser launched and ready');
|
||||
|
||||
// Pass browser to PDF service
|
||||
setBrowser(browser);
|
||||
|
||||
// Restart browser if it crashes
|
||||
browser.on('disconnected', () => {
|
||||
console.log('[BROWSER] Browser disconnected, restarting...');
|
||||
browser = null;
|
||||
initBrowser();
|
||||
});
|
||||
}
|
||||
return browser;
|
||||
}
|
||||
|
||||
// Middleware
|
||||
app.use(express.json());
|
||||
app.use(express.static('public'));
|
||||
|
||||
// Mount routes
|
||||
app.use('/api/customers', customerRoutes);
|
||||
app.use('/api/quotes', quoteRoutes);
|
||||
app.use('/api/invoices', invoiceRoutes);
|
||||
app.use('/api/payments', paymentRoutes);
|
||||
app.use('/api/qbo', qboRoutes);
|
||||
app.use('/api', settingsRoutes);
|
||||
|
||||
// Start server
|
||||
async function startServer() {
|
||||
await initBrowser();
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Quote System running on port ${PORT}`);
|
||||
});
|
||||
}
|
||||
|
||||
// Graceful shutdown
|
||||
process.on('SIGTERM', async () => {
|
||||
if (browser) {
|
||||
await browser.close();
|
||||
}
|
||||
const { pool } = require('./config/database');
|
||||
await pool.end();
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
startServer();
|
||||
|
||||
module.exports = app;
|
||||
Reference in New Issue
Block a user