# frozen_string_literal: true class APIParticulier::API include APIParticulier::Error INTROSPECT_RESOURCE_NAME = "introspect" COMPOSITION_FAMILIALE_RESOURCE_NAME = "v2/composition-familiale" AVIS_IMPOSITION_RESOURCE_NAME = "v2/avis-imposition" SITUATION_POLE_EMPLOI_RESOURCE_NAME = "v2/situations-pole-emploi" ETUDIANTS_RESOURCE_NAME = "v2/etudiants" TIMEOUT = 20 def initialize(token) @token = token end def scopes get(INTROSPECT_RESOURCE_NAME)['scopes'] end def composition_familiale(numero_allocataire, code_postal) get(COMPOSITION_FAMILIALE_RESOURCE_NAME, numeroAllocataire: numero_allocataire, codePostal: code_postal) end def avis_imposition(numero_fiscal, reference_avis) # NOTE: Il est possible que l'utilisateur ajoute une quatorzième lettre à la fin de sa référence d'avis. # Il s'agit d'une clé de vérification qu'il est nécessaire de'enlever avant de contacter API Particulier. get(AVIS_IMPOSITION_RESOURCE_NAME, numeroFiscal: numero_fiscal.to_i.to_s.rjust(13, "0"), referenceAvis: reference_avis.to_i.to_s.rjust(13, "0")) end def situation_pole_emploi(identifiant) get(SITUATION_POLE_EMPLOI_RESOURCE_NAME, identifiant: identifiant) end def etudiants(ine) # NOTE: Paramètres d'appel mutuellement exclusifs, # l'appel par INE est réservé aux acteurs de la sphère de l'enseignement # - INE, l'Identifiant National Étudiant # - état civil, constitué du nom, prénom, date de naissance, sexe et lieu de naissance # TODO: ajouter le support de l'état civil get(ETUDIANTS_RESOURCE_NAME, ine: ine) end private def get(resource_name, params = {}) url = [API_PARTICULIER_URL, resource_name].join("/") response = Typhoeus.get(url, headers: { accept: "application/json", "X-API-Key": @token }, params: params, timeout: TIMEOUT) if response.success? JSON.parse(response.body) elsif response.code == 401 raise Unauthorized.new(response) else raise RequestFailed.new(response) end end end