incubateur-ademe / territoires-en-transitions

Plateforme numérique pour faciliter et accélérer la mise en oeuvre des actions de transition écologique dans les collectivités territoriales
Other
18 stars 7 forks source link

Territoires en Transition

Dans le cadre des programmes d'accompagnement des collectivités dans leurs démarches de transition écologique, l'ADEME (l'Agence de la transition écologique) s'est associée à beta.gouv.fr pour lancer une plateforme numérique pour faciliter et accélérer la mise en œuvre des actions de transition écologique dans les collectivités territoriales.

L'interface a pour objectifs de permettre aux utilisateurs :

Organisation du dépôt

Ce dépôt Git contient :

Chaque dossier à la racine contient son propre README.md et peut a priori fonctionner de manière autonome.

Vous pouvez contribuer à notre projet en suivant cette documentation.

Conception

La conception, des données au choix de la stack.

Données

Les données métier

Les contenus de notre application sont écrits en markdown, ce faisant les experts métiers travaillent dans le même dépôt que les devs.

Ces fichiers markdowns représentent des définitions auxquelles sont rattachées des données provenant d'utilisateurs. Par exemple un indicateur tel que Emissions de GES est destiné à permettre aux utilisateurs à saisir leurs données annuelles dans notre application.

Ces définitions sont lues par la partie referentiel du business et sauvegardée en base afin d'être

Les données utilisateurs

Les utilisateurs saisissent pour le compte de leur collectivité des données qui sont stockées dans le data layer qui vérifie leurs droits en écriture grace aux row security policies

Les données d'évaluation

Les données utilisateurs rattachées aux référentiels sont évaluées par le service évaluation du business qui inscrit les résultats en base et les transmets au client via les WebSockets de supabase realtime

Design

L'application est composée de trois éléments : le client, le data layer et le business.

Chacun de ses éléments a un périmètre définit :

Stack

Lancer le projet en local pour le développement

Dépendances

Set up

Une fois les dépendances il suffit de lancer la commande setup-env avec earthly pour configurer les variables d'environnement de chaque projet.

earthly +setup-env

Lancer les différents services en local

Pour lancer les services en local avec docker, on utilise la commande dev :

earthly +dev

Par default le client (app) n'est pas lancé, on peut néanmoins spécifier les options suivantes :

On peut écrire par exemple :

earthly +dev --stop=yes --datalayer=yes --business=yes --app=no

Lancer les tests

Les trois services sont des projets indépendants qui peuvent-être testés en local sous reserve que les dépendances de développement soient installées.

Néanmoins, on peut lancer les tests avec earthly en utilisant des conteneurs :

# Lance le projet suivi de tout les tests.
earthly +dev

# Lance les tests indépendamment
earthly --push +db-test
earthly --push +business-test
earthly --push +app-test
earthly --push +api-test
earthly --push +deploy-test

Déploiement

Aujourd'hui le business et le client sont déployés chez Scalingo, le data layer est chez Supabase en mode BaaS.

Workspaces NPM

Les workspaces NPM sont utilisés pour partager du code entre différents modules front du projet (ui, app et site).

Tous les modules du projet utilisent l'espace de nommage @tet (exemple: @tet/app pour l'application).

Les chemins des workspaces sont listés dans la propriétés workspaces du fichier package.json à la racine du dépôt.

Dans ce contexte les différentes commandes NPM habituelles peuvent être lancées depuis le répertoire racine en précisant avec l'option -w (ou --workspace) le(s) workspace(s) dans le(s)quel(s) la commande doit s'exécuter.

Exemples :

Les modules site et app étant dépendants du module partagé ui, des commandes permettant de lancer en parallèle les serveurs de développement sont disponibles à la racine du projet.

De la même manière pour faire le build de production du site et de l'app il faut aussi faire le build des modules partagés.

Enfin pour faire le build depuis Scalingo la variable d'environnement SCALINGO_BUILD est attendue pour contrôler le fonctionnement de la commande npm run build.