banatie-service/apps/api-service/src/server.ts

87 lines
2.5 KiB
TypeScript

import { createApp, appConfig } from './app';
import fs from 'fs';
// Ensure required directories exist
const ensureDirectoriesExist = () => {
const directories = [
appConfig.resultsDir,
appConfig.uploadsDir,
'./logs'
];
directories.forEach(dir => {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
console.log(`[${new Date().toISOString()}] Created directory: ${dir}`);
}
});
};
// Enhanced logging function
const log = (level: 'INFO' | 'ERROR' | 'WARN' | 'DEBUG', message: string) => {
const timestamp = new Date().toISOString();
const logMessage = `[${timestamp}] [${level}] ${message}`;
console.log(logMessage);
};
// Validate environment
const validateEnvironment = () => {
if (!appConfig.geminiApiKey) {
log('ERROR', 'GEMINI_API_KEY environment variable is required');
process.exit(1);
}
log('INFO', 'Environment validation passed');
log('INFO', `Server configuration: port=${appConfig.port}, maxFileSize=${appConfig.maxFileSize}bytes, maxFiles=${appConfig.maxFiles}`);
};
// Graceful shutdown
const setupGracefulShutdown = (server: any) => {
const shutdown = (signal: string) => {
log('INFO', `Received ${signal}, shutting down gracefully...`);
server.close((err: Error) => {
if (err) {
log('ERROR', `Error during shutdown: ${err.message}`);
process.exit(1);
}
log('INFO', 'Server closed successfully');
process.exit(0);
});
};
process.on('SIGTERM', () => shutdown('SIGTERM'));
process.on('SIGINT', () => shutdown('SIGINT'));
};
// Start server
const startServer = async () => {
try {
log('INFO', '🚀 Starting Banatie Image Generation Server...');
// Validate environment and create directories
validateEnvironment();
ensureDirectoriesExist();
// Create Express app
const app = createApp();
// Start server
const server = app.listen(appConfig.port, () => {
log('INFO', `✅ Server running on port ${appConfig.port}`);
log('INFO', `📋 Health check: http://localhost:${appConfig.port}/health`);
log('INFO', `📖 API info: http://localhost:${appConfig.port}/api/info`);
log('INFO', `🎨 Generate endpoint: http://localhost:${appConfig.port}/api/generate`);
});
// Setup graceful shutdown
setupGracefulShutdown(server);
} catch (error) {
log('ERROR', `Failed to start server: ${error instanceof Error ? error.message : error}`);
process.exit(1);
}
};
// Start the server
startServer();