gfw-api/gfw-subscription-api

View on GitHub
app/src/services/updateService.js

Summary

Maintainability
A
1 hr
Test Coverage
C
72%
const logger = require('logger');
const ctRegisterMicroservice = require('ct-register-microservice-node');
const LastUpdate = require('models/lastUpdate');
const JSONAPIDeserializer = require('jsonapi-serializer').Deserializer;

class UpdateService {

    static async checkUpdated(dataset) {
        logger.info(`Checking if dataset ${dataset} was updated`);
        try {
            const result = await ctRegisterMicroservice.requestToMicroservice({
                uri: `/${dataset}/latest`,
                method: 'GET',
                json: true
            });

            const latest = await new JSONAPIDeserializer({
                keyForAttribute: 'camelCase'
            }).deserialize(result);
            logger.debug('Obtaining last updated');
            const lastUpdated = await LastUpdate.findOne({ dataset }).exec();
            logger.debug('Last updated', lastUpdated);

            if (!lastUpdated || new Date(lastUpdated.date) >= new Date(latest[0].date)) {
                if (lastUpdated) {
                    logger.info(`Dataset ${dataset} was not updated (last sent date ${lastUpdated.date} and latest date ${latest[0].date})`);
                } else {
                    logger.info(`Dataset ${dataset} was not updated`);
                }
                return {
                    updated: false
                };
            }

            logger.debug('Saving lastupdates', dataset, latest[0].date);
            await LastUpdate.update({ dataset }, { date: latest[0].date }).exec();

            return {
                beginDate: lastUpdated.date,
                endDate: latest[0].date,
                updated: true
            };
        } catch (e) {
            logger.error('Error to obtain latest endpoint', e);
            return {
                updated: false
            };
        }

    }

}

module.exports = UpdateService;