Nexus: Ajout d'une synchronisation de données pour les analyses des utilisateurs Nexus - #7058
Conversation
235644e to
aff6610
Compare
rsebille
left a comment
There was a problem hiding this comment.
Même si je vois le coté pratique pour là maintenant, ça me semble extrêmement fragile et très vite galère à faire évoluer comme manière de faire 🫤 :
- N'importe qui peux supprimer les tables ou les recréer avec un autre schéma
- N'importe qui peux accéder aux données injectées par les autres
- La synchronisation des migrations sur le schéma commun va demander une modif' dans tous les producteurs
- A partir du moment où il faudra normaliser (casse et format des champs, énumérations, ...) ou vérifier les données, il va falloir le faire dans chaque producteur.
- La création d'un identifiant unique ne devrais pas être porter par le producteur de donnée, qui par définition n'a pas connaissance des autres
- L'injection de donnée directement dans la DB c'est chiant, ça oblige à faire des shenanigans de rééssais, ça complexifie les investigations en cas d'erreur vu qu'on ne peux pas savoir exactement ce qui à été envoyée, ça oblige les data de récupérer les données de la DB de prod pour avancer en local.
- Coté Nexus vous ne contrôlez pas ce qui arrive chez vous donc des choses vont "casser", et parfois sans que vous vous en rendiez compte, c'est typiquement ce qui arrive sur certain DAG coté Pilotage car on fait des copies 1-1 d'une source dans une table de la DB
En reprenant ton idée d'avoir une commande clés en main, je verrais plutôt cette commande envoyer les données sous format plat, et ensuite avoir une autre commande (peut être dans les emplois, un airflow coté M3, une app dédié, ...) qui va les chercher pour les traiter et les mettre là où il faut comme il faut.
aff6610 to
e4b1d4c
Compare
|
Suite à notre discussion : l'idéal serait d'avoir un s3 avec un dossier par produit On va rester pour l'instant sur cette version là qui va migrer dans une librairie de code commun à la PDI qui sera bientôt créée |
3e91ca9 to
afbf303
Compare
xavfernandez
left a comment
There was a problem hiding this comment.
Tout d'accord avec @rsebille 😬
leo-naeka
left a comment
There was a problem hiding this comment.
Romain voit juste avec #7058 (review), faudra y revenir…
|
J'ai bien vu vos commentaires, une fois la première version en place, je passerai à une version avec échanges de fichiers plats. |
afbf303 to
492d938
Compare
492d938 to
43612aa
Compare
| "source": "text", | ||
| "id_source": "text", | ||
| "id_unique": "text", | ||
| "nom": "text", | ||
| "prénom": "text", | ||
| "email": "text", | ||
| "téléphone": "text", | ||
| "last_login": "timestamp with time zone", | ||
| "auth": "text", | ||
| "type": "text", | ||
| "updated_at": "timestamp with time zone", |
There was a problem hiding this comment.
J'arrive un peu tard mais le franglais n'est pas gênant ?
There was a problem hiding this comment.
c'est pas totalement idéal, non.
Je corrigerais dans la V2 avec fichiers plats
|
|
||
| def populate_memberships(self): | ||
| employers_qs = ( | ||
| CompanyMembership.objects.active().select_related("company").only("company__uid", "user_id", "is_admin") |
There was a problem hiding this comment.
On a active() par défaut dans le manager, c'est pour être plus résilient qu'il est là aussi ?
|
|
||
| def populate_structures(self): | ||
| prescribers_qs = PrescriberOrganization.objects.select_related("insee_city") | ||
| company_qs = Company.objects.select_related("insee_city") |
There was a problem hiding this comment.
J'imagine qu'on est à peu près à jour avec les management commands des flux IAE, mais juste au cas où : on n'a pas besoin de l'info is_searchable ?
There was a problem hiding this comment.
Pour moi non parce qu'un utilisateur peut appartenir à une entreprise non visible
🤔 Pourquoi ?
Pour Nexus, nous souhaitons suivre l'inscription d'utilisateurs aux différents services et leur rattachements aux structures.
https://www.notion.so/gip-inclusion/Importer-les-tables-utilisateurs-des-produits-PDI-dans-un-metabase-28c5f321b60480519a66d7df815e868d
🍰 Comment ?
Création d'une management command "clé en main" qu'on peut copier dans les autres projets django facilement (dora, communauté, marché)
Donc sans se base sur le code du pilotage.
🚨 À vérifier
🏝️ Comment tester ?
💻 Captures d'écran