first commit
This commit is contained in:
116
server.js
Normal file
116
server.js
Normal file
@@ -0,0 +1,116 @@
|
||||
const express = require('express');
|
||||
const http = require('http');
|
||||
const https = require('https');
|
||||
const { sslConfig, serverConfig } = require('./config/config');
|
||||
const corsMiddleware = require('./middleware/cors');
|
||||
|
||||
// Import routes
|
||||
const jerseyRoutes = require('./routes/jersey');
|
||||
const tshirtRoutes = require('./routes/tshirt');
|
||||
const merchbayRoutes = require('./routes/merchbay');
|
||||
const maskRoutes = require('./routes/mask');
|
||||
|
||||
// Initialize Express app
|
||||
const app = express();
|
||||
|
||||
// Apply CORS middleware globally
|
||||
app.use(corsMiddleware);
|
||||
|
||||
// Health check endpoint
|
||||
app.get('/health', (req, res) => {
|
||||
res.status(200).json({
|
||||
status: 'healthy',
|
||||
service: 'screenshot-service',
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
});
|
||||
|
||||
// Mount route modules
|
||||
app.use('/jersey', jerseyRoutes);
|
||||
app.use('/tshirt', tshirtRoutes);
|
||||
app.use('/merchbay', merchbayRoutes);
|
||||
app.use('/mask', maskRoutes);
|
||||
|
||||
// Legacy route compatibility (backwards compatibility)
|
||||
// Map old routes to new structure
|
||||
app.get('/tb/:designId', (req, res) => {
|
||||
console.log('Legacy route /tb/:designId - redirecting to /jersey/:designId');
|
||||
req.url = `/jersey/${req.params.designId}`;
|
||||
jerseyRoutes(req, res);
|
||||
});
|
||||
|
||||
app.get('/ap/:designId', (req, res) => {
|
||||
console.log('Legacy route /ap/:designId - redirecting to /tshirt/allover/:designId');
|
||||
req.url = `/tshirt/allover/${req.params.designId}`;
|
||||
tshirtRoutes(req, res);
|
||||
});
|
||||
|
||||
// 404 handler for unmatched routes
|
||||
app.use((req, res) => {
|
||||
res.status(404).json({
|
||||
error: 'Route not found',
|
||||
path: req.path,
|
||||
method: req.method
|
||||
});
|
||||
});
|
||||
|
||||
// Global error handler
|
||||
app.use((err, req, res, next) => {
|
||||
console.error('Unhandled error:', err);
|
||||
res.status(500).json({
|
||||
error: 'Internal server error',
|
||||
message: err.message
|
||||
});
|
||||
});
|
||||
|
||||
// Create HTTP or HTTPS server based on configuration
|
||||
const server = serverConfig.useSSL && sslConfig
|
||||
? https.createServer(sslConfig, app)
|
||||
: http.createServer(app);
|
||||
|
||||
const protocol = serverConfig.useSSL && sslConfig ? 'https' : 'http';
|
||||
const sslNote = serverConfig.useSSL && sslConfig ? '(Direct SSL)' : '(SSL via Traefik/Reverse Proxy)';
|
||||
|
||||
// Start server
|
||||
server.listen(serverConfig.port, serverConfig.host, () => {
|
||||
console.log('╔════════════════════════════════════════════════════════════╗');
|
||||
console.log('║ Screenshot Service - Unified Application Started ║');
|
||||
console.log('╚════════════════════════════════════════════════════════════╝');
|
||||
console.log('');
|
||||
console.log(` 🚀 Server running on: ${protocol}://${serverConfig.host}:${serverConfig.port}`);
|
||||
console.log(` 🔒 SSL Mode: ${sslNote}`);
|
||||
console.log('');
|
||||
console.log(' 📍 Available Routes:');
|
||||
console.log(' ├─ /health - Health check');
|
||||
console.log(' ├─ /jersey/:designId - Jersey screenshots (4 views)');
|
||||
console.log(' ├─ /tshirt/:designId - T-Shirt screenshots (4 views)');
|
||||
console.log(' ├─ /tshirt/allover/:designId - T-Shirt all-over print (2 views)');
|
||||
console.log(' ├─ /merchbay/tshirt/:designId - Merchbay T-Shirt (4 views)');
|
||||
console.log(' ├─ /merchbay/allover/:designId - Merchbay all-over print (2 views)');
|
||||
console.log(' ├─ /merchbay/legacy/:designId - Merchbay legacy viewer (4 views)');
|
||||
console.log(' ├─ /mask/:designId - All-over print mask');
|
||||
console.log(' └─ /mask/classic/:designId - Classic mask');
|
||||
console.log('');
|
||||
console.log(' 🔄 Legacy Routes (Backwards Compatible):');
|
||||
console.log(' ├─ /tb/:designId → /jersey/:designId');
|
||||
console.log(' └─ /ap/:designId → /tshirt/allover/:designId');
|
||||
console.log('');
|
||||
console.log('════════════════════════════════════════════════════════════');
|
||||
});
|
||||
|
||||
// Graceful shutdown
|
||||
process.on('SIGTERM', () => {
|
||||
console.log('SIGTERM signal received: closing server');
|
||||
server.close(() => {
|
||||
console.log('Server closed');
|
||||
process.exit(0);
|
||||
});
|
||||
});
|
||||
|
||||
process.on('SIGINT', () => {
|
||||
console.log('SIGINT signal received: closing server');
|
||||
server.close(() => {
|
||||
console.log('Server closed');
|
||||
process.exit(0);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user