cmdalbem/ciclomapa

Atualizador recorrente automático de dados

Open

#6 opened on Nov 21, 2019

View on GitHub
 (2 comments) (1 reaction) (0 assignees)JavaScript (10 forks)auto 404
complexity: mediumenhancementhelp wanted

Repository metrics

Stars
 (88 stars)
PR merge metrics
 (PR metrics pending)

Description

Hoje em dia para atualizar o banco de dados com os dados mais recentes do OSM o usuário deve manualmente clicar no botão de "Atualizar".

image

Idealmente gostaríamos que essas atualizações fossem automáticas e ocorressem o mais frequentemente possível (digamos, a cada 5 minutos).

Pra inspiração, o script abaixo pode ser rodado no console e ele irá atualizar as cidades listadas no array de cities:

const cities = [
    'Aracaju, Sergipe, Brasil',
    'Belém, Pará, Brasil',
    'Belo Horizonte, Minas Gerais, Brasil',
    'Boa Vista, Roraima, Brasil',
    'Brasília, Distrito Federal, Brasil',
    'Campo Grande, Mato Grosso do Sul, Brasil',
    'Cuiabá, Mato Grosso, Brasil',
    'Curitiba, Paraná, Brasil',
    'Florianópolis, Santa Catarina, Brasil',
    'Fortaleza, Ceará, Brasil',
    'Goiânia, Goiás, Brasil',
    'João Pessoa, Paraíba, Brasil',
    'Macapá, Amapá, Brasil',
    'Maceió, Alagoas, Brasil',
    'Manaus, Amazonas, Brasil',
    'Natal, Rio Grande do Norte, Brasil',
    'Olinda, Pernambuco, Brasil',
    'Palmas, Tocantins, Brasil',
    'Paulista, Pernambuco, Brasil',
    'Porto Alegre, Rio Grande do Sul, Brasil',
    'Porto Velho, Rondônia, Brasil',
    'Recife, Pernambuco, Brasil',
    'Rio Branco, Acre, Brasil',
    'Rio de Janeiro, Rio de Janeiro, Brasil',
    'Salvador, Bahia, Brasil',
    'Sao Luis, Maranhão, Brasil',
    'São Paulo, São Paulo, Brasil',
    'Teresina, Piauí, Brasil',
    'Vitória, Espírito Santo, Brasil',
]

// Task that retrieves and processes data from OSM
const task = name => {
    ciclomapa.setState({ loading: true });
    return ciclomapa.getDataFromOSM({areaName: name});
}

// Apply the task iteratively to the cities in the array
cities.reduce((promiseChain, name) => {
    return promiseChain.then(chainResults =>
        task(name).then(currentResult =>
            [...chainResults, currentResult]
        )
    );
}, Promise.resolve([])).then(arrayOfResults => {
    console.log('All done!');
});

Contributor guide