ecolabdata / ecospheres

Portail des données de la transition écologique et de la cohésion des territoires
https://ecologie.data.gouv.fr
2 stars 0 forks source link

Migrer le schéma des extras #243

Closed abulte closed 3 days ago

abulte commented 1 month ago

A force de les manipuler, je me demande si on aurait pas intérêt à migrer les thèmes et sous-thèmes des extras vers une structure de type :

export interface TopicExtras {
  ['ecospheres:theme']: string
  ['ecospheres:subtheme']: string
  ['ecospheres:datasets_properties']: DatasetProperties[],
}

vs

export interface TopicExtras {
  ['ecospheres:informations']: Array<{
    theme: string
    subtheme: string
  }>
  ['ecospheres:datasets_properties']: DatasetProperties[],
}

Les "informations" n'ont pas de raison d'être une liste (à part la limitation data.gouv.fr qui n'accepte pas d'objet au premier niveau) et c'est un peu lourd à manipuler en pratique (en gros il faut toujours s'assurer qu'il y un déjà un élément d'index 0 et le cas échéant le modifier, sinon le créer).

C'est aussi cohérent avec la manière dont data.gouv.fr utilise généralement les extras (simple clé-valeur).

J'ai tenté d'ajouter l'information cloned_from dans informations pour https://github.com/opendatateam/udata-front-kit/pull/461 mais la complexité de gérer plusieurs attributs hétérogènes (thèmes vs clone) m'a amené à privilégier un attribut indépendant. Le nom générique "informations" devient ainsi malvenu.

Le seul inconvénient que je vois (à part l'effort de migration) est la multiplication potentielle des clés d'extras. Mais je ne pense pas que ce soit un problème côté data.gouv.fr.

streino commented 1 month ago

https://github.com/opendatateam/udata-front-kit/issues/103 permet l'utilisation d'un dict au premier niveau.

J'ai pas poussé l'evol mais si on veut changer, on devrait plutôt viser :

export interface TopicExtras {
  'theme': string
  'subtheme': string
  'datasets_properties': DatasetProperties[],
}

et hydrater avec extras['ecospheres'].

Éventuellement regrouper theme/subtheme sous informations si on veut être plus sémantique (mais plus nested). Dans ce cas cloned_from irait dans informations j'imagine.

Je sais pas si c'est du TS correct mais tu vois l'idée :)

abulte commented 1 month ago

Han j'avais raté que ça avait été fait 🎉

Oui carrément du coup.

abulte commented 1 month ago

Plan de marche possible:

streino commented 1 month ago

+ plan de migration pour éviter de se retrouver au milieu du gué :pray:

abulte commented 1 month ago

@streino proposition et code pour le plan de migration https://github.com/abulte/ecospheres-scripts?tab=readme-ov-file#scripts

Je pense que c'est pas mal de commencer à se constituer une petite bibliothèque de scripts au passage.

streino commented 1 month ago

Je pense que c'est pas mal de commencer à se constituer une petite bibliothèque de scripts au passage.

Tout à fait d'accord ! :grin: Je verrais bien ça sous ./migrations (au hasard)...

Je propose de review la propal en PR sur ecolabdata/ecospheres-scripts, ça te va ?