45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
require('dotenv').config();
|
|
const express = require('express');
|
|
const cors = require('cors');
|
|
const path = require('path');
|
|
|
|
const ticketsRouter = require('./routes/tickets');
|
|
const lookupsRouter = require('./routes/lookups');
|
|
const dashboardRouter = require('./routes/dashboard');
|
|
const activityRouter = require('./routes/activity');
|
|
const emailRouter = require('./routes/email');
|
|
|
|
const app = express();
|
|
const PORT = process.env.PORT || 3000;
|
|
|
|
// Middleware
|
|
app.use(cors());
|
|
app.use(express.json({ limit: '50mb' }));
|
|
|
|
// Serve static frontend
|
|
app.use(express.static(path.join(__dirname, 'public')));
|
|
|
|
// API Routes
|
|
app.use('/api/tickets', ticketsRouter);
|
|
app.use('/api', lookupsRouter);
|
|
app.use('/api/dashboard', dashboardRouter);
|
|
app.use('/api/attivita', activityRouter);
|
|
app.use('/api/email', emailRouter);
|
|
|
|
// SPA fallback — serve index.html for all non-API routes
|
|
app.get('*', (req, res) => {
|
|
if (!req.path.startsWith('/api')) {
|
|
res.sendFile(path.join(__dirname, 'public', 'index.html'));
|
|
}
|
|
});
|
|
|
|
// Error handler
|
|
app.use((err, req, res, next) => {
|
|
console.error('Server error:', err);
|
|
res.status(500).json({ error: 'Internal server error', message: err.message });
|
|
});
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`\n ⚡ OTRS Turbo running at http://localhost:${PORT}\n`);
|
|
});
|