Compare commits

...

2 commits

Author SHA1 Message Date
1c348566f0 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.
2025-04-21 23:14:56 +03:00
e7c2701d52 chore: Added currency fee types (fiat currency or cryptocurrency) to module.exports 2025-04-21 23:13:18 +03:00
3 changed files with 28 additions and 0 deletions

26
main.js
View file

@ -10,6 +10,9 @@ const config = require('./utils/load_config.js')();
const services = []; const services = [];
const servicesDir = path.join(__dirname, 'services'); const servicesDir = path.join(__dirname, 'services');
let fiatFetched = false;
let cryptoFetched = false;
async function main() { async function main() {
if (!config['schedule']) if (!config['schedule'])
throw new Error('The crontab schedule is not set.'); throw new Error('The crontab schedule is not set.');
@ -34,6 +37,9 @@ async function main() {
schedule.scheduleJob(config['schedule'], async () => { schedule.scheduleJob(config['schedule'], async () => {
console.log('Running scheduled task at:', new Date()); console.log('Running scheduled task at:', new Date());
fiatFetched = false;
cryptoFetched = false;
for (const srv of services) { for (const srv of services) {
const results = await srv.parseCurrencies(); const results = await srv.parseCurrencies();
@ -42,6 +48,16 @@ async function main() {
for (const result of results) { for (const result of results) {
try { 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); const currency = await validateCurrency(result);
await pool.query( await pool.query(
@ -59,6 +75,16 @@ async function main() {
console.error(validationError); 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 { } else {
console.error("Data not received for writing to the database."); console.error("Data not received for writing to the database.");
} }

View file

@ -5,6 +5,7 @@ const { truncate_number } = require('../utils/truncate_number.js');
module.exports = { module.exports = {
info: { info: {
name: 'CoinMarketCap', name: 'CoinMarketCap',
type: 'crypto'
}, },
parseCurrencies: async () => { parseCurrencies: async () => {
const promises = config['currency']['crypto'].map(fromCurrency => { const promises = config['currency']['crypto'].map(fromCurrency => {

View file

@ -5,6 +5,7 @@ const { truncate_number } = require('../utils/truncate_number.js');
module.exports = { module.exports = {
info: { info: {
name: 'DuckDuckGo', name: 'DuckDuckGo',
type: 'fiat'
}, },
parseCurrencies: async () => { parseCurrencies: async () => {
const promises = config['currency']['fiat'].map(fromCurrency => { const promises = config['currency']['fiat'].map(fromCurrency => {