Fix issues #49 and #50: Migration errors and missing worker manager

- Fix #49: Add column existence checks to migration 011_add_user_upload_settings.js
  to prevent "column already exists" errors during deployment
- Fix #50: Create missing workerManager.js file that starts background services
  (file watcher and expiration checker) for native installations
This commit is contained in:
Claude
2025-11-19 21:59:27 +00:00
parent 9f04da6956
commit 97589a7c5f
2 changed files with 122 additions and 17 deletions
+72
View File
@@ -0,0 +1,72 @@
/**
* Worker Manager - Background service for PicPeak
*
* This service runs as a separate process to handle:
* - File watching for new photos
* - Expiration checking for events
* - Other background tasks
*/
const path = require('path');
const logger = require('../utils/logger');
// Load environment variables
require('dotenv').config({ path: path.join(__dirname, '../../.env') });
// Import services
const { startFileWatcher } = require('./fileWatcher');
const { startExpirationChecker } = require('./expirationChecker');
let isShuttingDown = false;
async function startWorkers() {
logger.info('Starting PicPeak background workers...');
try {
// Start file watcher for automatic photo processing
startFileWatcher();
logger.info('File watcher started successfully');
// Start expiration checker for event lifecycle management
startExpirationChecker();
logger.info('Expiration checker started successfully');
logger.info('All background workers started successfully');
} catch (error) {
logger.error('Failed to start background workers:', error);
process.exit(1);
}
}
function handleShutdown(signal) {
if (isShuttingDown) {
logger.info('Shutdown already in progress...');
return;
}
isShuttingDown = true;
logger.info(`Received ${signal}. Shutting down gracefully...`);
// Give time for cleanup
setTimeout(() => {
logger.info('Worker manager shutdown complete');
process.exit(0);
}, 1000);
}
// Handle shutdown signals
process.on('SIGTERM', () => handleShutdown('SIGTERM'));
process.on('SIGINT', () => handleShutdown('SIGINT'));
// Handle uncaught errors
process.on('uncaughtException', (error) => {
logger.error('Uncaught exception in worker manager:', error);
process.exit(1);
});
process.on('unhandledRejection', (reason, promise) => {
logger.error('Unhandled rejection in worker manager:', reason);
});
// Start workers
startWorkers();