chore: Services loading has been redone, now in config file you can write which services will be loaded. You can also customize API token and base url

This commit is contained in:
Danil 2025-04-12 12:50:10 +03:00
parent 6125f99ec6
commit f6b21ed84d
3 changed files with 28 additions and 15 deletions

View file

@ -10,6 +10,15 @@
fiat: true fiat: true
crypto: false crypto: false
} }
services: {
enabled: [
'coinmarketcap'
]
coinmarketcap: {
"api_key": TOKEN_COINMARKETCAP"
"base_url": https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest
}
}
fiat: fiat:
[ [
USD, USD,

26
main.js
View file

@ -7,26 +7,28 @@ const { validateCurrency } = require('./models/Currency.js');
const { create_table, pool } = require('./database/data.js'); const { create_table, pool } = require('./database/data.js');
const config = require('./utils/load_config.js')(); const config = require('./utils/load_config.js')();
const services = [];
const servicesDir = path.join(__dirname, 'services');
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.');
else if (!cron.isValidCron(config['schedule'], { alias: true })) else if (!cron.isValidCron(config['schedule'], { alias: true }))
throw new Error('The crontab is invalid.'); throw new Error('The crontab is invalid.');
const servicesDir = path.join(__dirname, 'services');
const serviceFiles = fs.readdirSync(servicesDir)
.filter(filename => filename.endsWith('.js'));
const services = []; console.log('Loading services...');
for (const file of serviceFiles) { config['currency']['services']['enabled'].forEach(serviceName => {
const filePath = path.join(servicesDir, file); const servicePath = path.join(servicesDir, `${serviceName}.js`);
const moduleLoaded = require(filePath); if (fs.existsSync(servicePath)) {
const serviceModule = require(servicePath);
if (typeof moduleLoaded.parseCurrencies === 'function') services.push(serviceModule);
services.push(moduleLoaded); console.log(`Service ${serviceName} loaded successfully`);
} } else {
console.error(`Service file for ${serviceName} not found at ${servicePath}`);
}
});
console.log('Loaded parser services:', serviceFiles);
await create_table(); await create_table();
schedule.scheduleJob(config['schedule'], async () => { schedule.scheduleJob(config['schedule'], async () => {

View file

@ -8,15 +8,17 @@ module.exports = {
return config['currency']['crypto'].map(convCurrency => { return config['currency']['crypto'].map(convCurrency => {
if (fromCurrency === convCurrency) return Promise.resolve(null); if (fromCurrency === convCurrency) return Promise.resolve(null);
const coinmarketcap = config['currency']['services']['coinmarketcap'];
return axios.get( return axios.get(
'https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest', coinmarketcap['base_url'],
{ {
params: { params: {
symbol: fromCurrency, symbol: fromCurrency,
convert: convCurrency, convert: convCurrency,
}, },
headers: { headers: {
'X-CMC_PRO_API_KEY': config['currency']['api_keys']['coinmarketcap'], 'X-CMC_PRO_API_KEY': coinmarketcap['api_key'],
} }
} }
) )
@ -33,7 +35,7 @@ module.exports = {
}; };
}) })
.catch((err) => { .catch((err) => {
console.error(err.respone.data); console.error(err);
return null; return null;
}); });
}); });