Skip to content
Snippets Groups Projects
insee.js 1.03 KiB
Newer Older
Bastien DUMONT's avatar
Bastien DUMONT committed
// @ts-check
const { default: axios } = require('axios')
const { log, errors } = require('cozy-konnector-libs')
const API_URL = 'https://apicarto.ign.fr/api/codes-postaux/communes'

Bastien DUMONT's avatar
Bastien DUMONT committed
/**
 * Return inseeCode given a postalCode
 * @param {string} postalCode
 * @param {string} [city]
 * @return {Promise<string>} inseeCode
Bastien DUMONT's avatar
Bastien DUMONT committed
 */
async function getInseeCode(postalCode, city) {
  try {
    log('info', `Query getInseeCode for postalCode ${postalCode} / ${city}`)
    const response = await axios.get(`${API_URL}/${postalCode}`)

    if (response.data.length === 1) {
      return response.data[0].codeCommune
    } else {
      if (!city) throw errors.USER_ACTION_NEEDED

      const filteredResponse = response.data.filter(
        town => town.nomCommune.toLowerCase() === city.toLowerCase()
      )
      return filteredResponse[0].codeCommune
    }
  } catch (error) {
    log(
      'error',
      `Query getInseeCode failed for postalCode ${postalCode} / ${city}`
    )
    throw errors.USER_ACTION_NEEDED
Bastien DUMONT's avatar
Bastien DUMONT committed
}

module.exports = {
  getInseeCode,
}