From 1c348566f0567cea318ec85d6c7f084cc19640ef Mon Sep 17 00:00:00 2001 From: Redume Date: Mon, 21 Apr 2025 23:14:56 +0300 Subject: [PATCH] feat: Add conditional data fetching logic for fiat and crypto currencies - Introduced flags to prevent duplicate data fetching for fiat and crypto currencies. - Added service status check to skip fetching data if it's already collected for the respective currency type. - Implemented logging for successful and skipped data fetching for both fiat and crypto services. - Reset flags before each scheduled task to allow fetching fresh data on every run. - Enhanced error handling and logging for each service's data fetching attempt. --- main.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/main.js b/main.js index 6a93d96..d2d9465 100644 --- a/main.js +++ b/main.js @@ -10,6 +10,9 @@ const config = require('./utils/load_config.js')(); const services = []; const servicesDir = path.join(__dirname, 'services'); +let fiatFetched = false; +let cryptoFetched = false; + async function main() { if (!config['schedule']) throw new Error('The crontab schedule is not set.'); @@ -34,6 +37,9 @@ async function main() { schedule.scheduleJob(config['schedule'], async () => { console.log('Running scheduled task at:', new Date()); + fiatFetched = false; + cryptoFetched = false; + for (const srv of services) { const results = await srv.parseCurrencies(); @@ -42,6 +48,16 @@ async function main() { for (const result of results) { try { + if (srv.info.type === 'fiat' && fiatFetched) { + console.log('Skipping fiat currency collection as data has already been fetched.'); + continue; + } + + if (srv.info.type === 'crypto' && cryptoFetched) { + console.log('Skipping crypto currency collection as data has already been fetched.'); + continue; + } + const currency = await validateCurrency(result); await pool.query( @@ -59,6 +75,16 @@ async function main() { console.error(validationError); } } + + if (srv.info.type === 'crypto') { + cryptoFetched = true; + console.log('Crypto currency data fetched successfully.'); + } + + if (srv.info.type === 'fiat') { + fiatFetched = true; + console.log('Fiat currency data fetched successfully.'); + } } else { console.error("Data not received for writing to the database."); }