etalab / admin_api_entreprise

Site vitrine / backoffice de API Entreprise
https://entreprise.api.gouv.fr
MIT License
9 stars 5 forks source link

DataPass webhooks: problème de persistence des contacts #1090

Closed skelz0r closed 1 year ago

skelz0r commented 1 year ago

Il y a de l'inconsistence de données même sur les nouvelles data.

Pour https://datapass.api.gouv.fr/api-entreprise/52900 je n'ai pas les contacts tech/metier en db.

Il semblerait qu'il y ait beaucoup plus de problèmes, on va continuer de creuser ici

cf https://github.com/etalab/admin_api_entreprise/issues/1088#issuecomment-1589601019

skelz0r commented 1 year ago
irb(main):073:0> AuthorizationRequest.includes(:contact_technique).where(status: 'validated', api: 'entreprise').select { |ar| ar.contact_technique.nil? }.count
=> 29

--^ j'ai de tout en terme de date, avec plein de demandes sur la même date sans contact technique

irb(main):075:0> AuthorizationRequest.includes(:contact_metier).where(status: 'validated', api: 'entreprise').select { |ar| ar.contact_metier.nil? }.count
=> 24

même certains sans demandeur:

irb(main):076:0> AuthorizationRequest.includes(:demandeur).where(status: 'validated', api: 'entreprise').select { |ar| ar.demandeur.nil? }.count
=> 6
skelz0r commented 1 year ago

Pour les demandeurs, seulement 6 vieilles demandes. Le reste y'a du vieux et du récent (9 pour metier en récent, 5 en technique).

=> Y'a eu un mauvais clean ET il y a un bug en cours.

Vu qu'il y a seulement 9 demandes récemment validées, cela affecte toutes les demandes.

skelz0r commented 1 year ago

Même souci pour API Particulier sur les contacts techniques, semblerait qu'aucune nouvelle demande ne possède de contact technique (mais tous les contacts demandeurs sont là).

skelz0r commented 1 year ago

C'est clean et déployé pour les nouveaux.

En ce qui concerne les anciens je pense que j'ai une piste: on a des users qui ne persistent pas car ils existent déjà en database MAIS avec des différences de majuscules.

Par exemple:

email = 'john.doe@oki.fr'
user=User.find_or_initialize_by(email: email)
user.valid?
=> false
irb(main):200:0> user.errors
=> #<ActiveModel::Errors [#<ActiveModel::Error attribute=email, type=taken, options={:value=>"john.doe@oki.fr"}>]>
 User.where("email ilike 'john.doe@oki.fr'")
=>
[#<User:0x00007f15c974dac0
  id: "whatever",
  email: "john.doe@OKI.fr",
]
skelz0r commented 1 year ago

Plus je creuse plus c'est wtf :')

Je note des trucs à fixer dans une autre itération:

skelz0r commented 1 year ago

On est OK pour le clean du legacy.

Je vais aller harden aussi cette gestion d'email parce que c'est pas possible là.. (et je closerai à ce moment là)

skelz0r commented 1 year ago

Pour info j'ai clean avec ça: https://gist.github.com/skelz0r/a26b559f5f39f4b66f045f0f31159dea (j'ai commenté l'historique)