68 lines
2.1 KiB
Ruby
68 lines
2.1 KiB
Ruby
# 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
|