mirror of
https://github.com/tiennm99/store-scraper-bot.git
synced 2026-10-14 14:17:48 +00:00
feat: initial JavaScript port of store-scraper-bot
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.
This commit is contained in:
commit
a656a18ce8
41 files changed
+1852
No files matched your search
@@ -0,0 +1,43 @@
|
||||
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);
|
||||
});
|
||||
Reference in new issue
Block a user