etalab / rncs_worker_api_entreprise

API pour récupérer et mettre à disposition les données du Répertoire National du Commerce et des Société
https://entreprise.data.gouv.fr
MIT License
23 stars 13 forks source link

Harmonisation des formats de date #136

Closed Samuelfaure closed 2 years ago

Samuelfaure commented 5 years ago

A l'heure actuelle des entrées de date sont au format 30/01/2019 et d'autres 2019-01-30 (ISO8601), par exemple pour les observations, selon l'origine du greffe. C'est un problème, on ne peut pas retourner aléatoirement un format différent sur le même champs.

Je propose de corriger cela pendant l'import en surchargeant le setter activerecord :

class Observation < ApplicationRecord
  belongs_to :dossier_entreprise

  def date_ajout=(val)
    write_attribute(:date_ajout, formatted_date(val)) if val.match?(/\d{2}\/\d{2}\/\d{4}/)
    write_attribute(:date_ajout, val)
  end

  private

  def formatted_date(date)
    Date.strptime(date, '%d/%m/%Y').iso8601
  end
end

Problème possible : impact sur les performances pendant import (surtout niveau regex bien qu'elle soit simple).

brindu commented 5 years ago

On ne peut pas surcharger les setter pendant l'import : premièrement parce que lors de l'import d'un stock les setter ne sont pas utilisés par ActiveRecord.import. Ensuite, on ne parvient déjà pas à importer la donnée à cause des CSV dont je vais taire la qualité... On ne va pas rajouter une validation sur le format de date.

C'est la raison pour laquelle tout est importé en base en string.

Je ne pense pas qu'on soit prêt côté API pour améliorer le format et la qualité de la donnée. C'est ici une problématique d'affichage (aujourd'hui en tout cas) et donc un soucis à résoudre dans le front. Pour éviter les problèmes je renvoie tout en string, si tu veux tenter de formatter la donnée côté front pour afficher des jolies dates c'est ok pour moi. Soit la date est donnée avec des "/", soit avec des "-" et ça se formate en date, sinon garder et afficher la donnée brute.

Enfin, on ne va pas renvoyer autre chose que des string dans un premier temps : si le format d'un ou plusieurs champs changent il faudra une nouvelle version des API et ce n'est pas ce qu'on recherche.