mirror of
https://github.com/tiennm99/store-scraper-bot.git
synced 2026-10-11 12:29:01 +00:00
Node.js 20+ ESM port mirroring Java/Go implementations. - 13 Telegram commands matching Java identifiers - MongoDB schema parity (common, group, apple_app, google_app collections) - Apple/Google scrapers calling store-scraper.vercel.app with 10-min cache - Daily 7am Vietnam-time cron with weekend-silent mode - HTML table renderer matching Java/Go output - Docker + Compose (prod and dev) Untested end-to-end against live Telegram or upstream API.
44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
import { loadConfig } from './config.js';
|
|
import { closeMongoDB, initMongoDB } from './repository/mongodb.js';
|
|
import { initAdmin } from './repository/admin-repository.js';
|
|
import { createAppleScraper } from './api/apple-scraper.js';
|
|
import { createGoogleScraper } from './api/google-scraper.js';
|
|
import { createBot } from './bot/bot.js';
|
|
import { createScheduler } from './scheduler/scheduler.js';
|
|
|
|
async function main() {
|
|
const config = loadConfig();
|
|
const logger = config.logger;
|
|
logger.info({ env: config.env, commit: config.sourceCommit }, 'Starting Store Scraper Bot');
|
|
|
|
await initMongoDB(config);
|
|
await initAdmin(); // Java parity: ensure singleton "common/admin" doc exists.
|
|
|
|
const appleScraper = createAppleScraper(config);
|
|
const googleScraper = createGoogleScraper(config);
|
|
|
|
const bot = createBot(config, appleScraper, googleScraper);
|
|
const scheduler = createScheduler(config, bot.sender, appleScraper, googleScraper);
|
|
scheduler.start();
|
|
|
|
logger.info('Starting Telegram bot polling');
|
|
|
|
const shutdown = async (signal) => {
|
|
logger.info({ signal }, 'Received shutdown signal, stopping bot...');
|
|
try {
|
|
scheduler.stop();
|
|
await bot.telegram.stopPolling();
|
|
await closeMongoDB();
|
|
} finally {
|
|
process.exit(0);
|
|
}
|
|
};
|
|
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
}
|
|
|
|
main().catch((err) => {
|
|
console.error('Fatal:', err);
|
|
process.exit(1);
|
|
});
|