lpirola/processador-inscricao-evento

View on GitHub
src/modules/datasource.js

Summary

Maintainability
A
1 hr
Test Coverage
import GoogleSpreadsheet from 'google-spreadsheet'
import async from 'async'

// TODO: melhorar trafego das mensagens de erro e acerto para fora da classe
class Datasource {
    constructor () {
        this.google_spreadsheet_key = process.env['GOOGLE_SPREADSHEET_KEY']
        this.creds = null
        this.validate = false
        if (process.env['GOOGLE_CREDS']) {
            this.creds = JSON.parse(process.env['GOOGLE_CREDS'])
        }
    }

    isConfigEmpty () {
        if (!this.google_spreadsheet_key) {
            return false
        }
        return true
    }

    testConnection (callback) {
        let doc = new GoogleSpreadsheet(this.google_spreadsheet_key)
        async.series([
            function(done){
                doc.getInfo(function(err, results) {
                    if (err) {
                        done('As configurações fornecidas para fonte de dados não são válidos'+err, null)
                    } else {
                        done(null, results)
                    }
                })
            }
        ], callback)
    }

    readContent (callback) {
        let doc = new GoogleSpreadsheet(this.google_spreadsheet_key)
        let worksheet_id = '';
        let that = this
        async.waterfall([
            // Tenta autenticar com credenciais do ambiente
            function(done) {
                if (that.creds) {
                    doc.useServiceAccountAuth(that.creds, done)
                } else {
                    done(null)
                }
            },
            // Testa conexão e retorna infos básicas da planilha
            function(done) {
                doc.getInfo(function(err, results) {
                    if (err) {
                        done('As configurações fornecidas para fonte de dados não são válidos'+err, null)
                    } else {
                        worksheet_id = results.worksheets[0].id
                        that.validate = true
                        done(null, results)
                    }
                })
            },
            // Lê conteúdo e certifica-se que planilha não está vazia
            function(sheetinfo, done) {
                doc.getRows(worksheet_id, {}, function (err, results) {
                    if (err) {
                        done('Problema ao tentar ler detalhes da planilha' + err, null)
                    } else {
                        if (parseInt(results.length) <= 1) {
                            done('Datasource não pode ser vazio.')
                        } else {
                            that.content = results
                            done(null, results)
                        }
                    }
                })
            }
        ], callback)
    }
}

export default Datasource