Giter Site home page Giter Site logo

comobi-core's Introduction

Comobi un service de covoiturage

Le projet Comobi est issu du projet Lot'ô car.

Historique Lot'ô car

Lot'ô car a commencé avec une base de données dans un Google Spreadsheet à plusieurs feuilles gérées manuellement//.

Cette gestion et le service par-dessus sont chronophages ; notamment trouver des correspondances entre les conducteur.rice.s et les demandes de trajet. C'est pour cette raison, que nous avons travaillé à d'abord à créer de petits outils indépendants qui permettent de libérer du temps à la personne qui fait ce travail manuellement.

Le volume de données était encore raisonnable pour que Google Spreadsheet soit utile, et avait été retenu pour être utilisé comme base de données principale. Toutefois, l'interface en tableau n'est pas le bon outil pour certaines tâches (notamment la correspondance conducteur.rice.s/trajets). Une interface a donc été développée.

David Bruant, dtc innovation, a été le développeur principal et référent technique du projet pour le moment

Corresplot

Corresplot est une interface utilisateur permettant de faire la correspondance facilement entre un.e conducteur.rice et une demande de trajet dans le Lot

Comobi

L'idée est de généraliser et de rendre plus générique le projet Lot'ô car afin qu'il puisse être déployé facilement et rapidement.

Organisation générale

Le repository github comobi-core contient ce qui est commun à toutes les instances (notamment le serveur qui discute avec la base de données)

Chaque instance est créé comme un repo github contenant uniquement les fichiers de contenu (textes, image, etc.) spécifiques à cette instance. Voir le repo betagouv/neutre.comobi.fr en exemple.

Chaque instance, au déploiement, tire la dernière version de la branche main de comobi-core et redéploie la combinaison de comobi-core et de ses propres fichiers

Actuellement, et pour des raisons historiques, les données sont stockées dans un Google Spreadsheet alimenté par les réponses à un Google Form. Nous planifions de transitionner vers une base de données MongoDB

Architecture

  • Jekyll permet de gérer la partie statique de l'application web :
    • _includes: les éléments pouvants être partagés entre les pages
    • _layout: les templates des pages
    • _sass: les fichiers de styles
  • Le framework Svelte est utilisé pour les composants d'interface (en particulier aujourd'hui le formulaire de recherche)
    • _scripts : le code côté client dont les composants d'interface
  • Express est utilisé pour la partie serveur. Les fichiers sont séparés en différents sous dossiers et utilisés à la fois par l'application principale mais pouvant être utilisée par l'application 'outil-métier' (qui n'est pas encore utilisé dans le cadre de CoMobi)
    • server : fonctions en rapport avec les trajets et les lieux
    • spreadsheetDatabase : les fonctions permettant d'accèder aux données
    • server.js : instanciation d'une application express et gestion des routes
  • les pages statiques en markdown:
    • index.md
    • recherche.md

Ajouter une nouvelle page

  • ajouter une page .md_
  • ajouter une route dans le fichier server.js

Base de connaissance de localisation

Parfois des communes sont fusionnées ou alors, les personnes habitant quelque part utilisent des noms pour les lieux qui ne sont pas les noms officiels (source gouvernementale) ou utilisés dans les API existantes. Ou alors, elles utilisent des noms raccourcis ambigus (dans le Lot, quand on parle de "Villeneuve", il est évident duquel on parle, alors qu'il existe plusieurs villes en France avec le nom "Villeneuve") Pour ces cas-là, nous mettons en place un Google Spreadsheet qui permet de consigner cette connaissance locale

Ce Google Spreadsheet contient 3 colonnes :

  • noms
    • on peut rentrer plusieurs noms en les séparant par des virgules afin de leur assigner la même position
  • latitude
  • longitude

Pour trouver les latitude/longitude, une manière de faire consiste à aller dans Google Maps, viser le lieu que l'on souhaite, faire un clic droit, sélectionner "Plus d'infos sur cet endroit" et en bas de l'écran, on peut voir les latitude/longitude

Pour développer en local

Installer jekyll et ses pré-requis

En suivant la documentation jekyll

Installer nodejs

En suivant la documentation nodejs

Installer les dépendances

npm install
bundle install

Première fois

  • Créer un fichier _config.yml (par exemple, en prenant ce modèle : https://github.com/betagouv/neutre.comobi.fr/blob/main/_config.yml )
  • Créer un projet dans la console Google
  • Créer une "clé API" (pas Oauth)
  • Créer un fichier .env avec les variables d'environnement:
    • GOOGLE_API_KEY : clef d'API créée ci-dessus
    • GOOGLE_DRIVER_SPREADSHEET_ID : identifiant du Google Spreadsheet qui sert de base de donnée

Lancer

# Pour créer un premier build, avec notamment la création du dossier _site
npm run build:jekyll

Au quotidien

Pour lancer l'application "trajets direct" :

npm run dev # start server

Déploiement sur Clever Cloud

Lorsque la branche main est modifiée un build automatique est lancé via une github action comprenant les étapes suivantes :

  • build du JS front-end
  • build de l'application avec jekyll
  • git push sur une branche nommée deploy Sur Clever Cloud un build automatique est lancé quand la branche deploy est mise à jour sur github

Langue

  • Documentation en français
  • Code et messages de commit en anglais

Licence

MIT

comobi-core's People

Contributors

audreybramy avatar danielbmy avatar davidbruant avatar laem avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar

comobi-core's Issues

Des trajets "absurdes" s'affichent parfois

On pourrait éviter les trajets dont :

  • la ville d'arrivée du passager est la ville de départ du conducteur
  • le temps de trajet total est supérieur à 2x le trajet initial

Question/Issue : phase de build

Avec la manière actuelle de faire, la phase de build crée un dossier _site contentant tout les dossiers à la racine du projet.
Hors, tous ces dossiers ne sont pas nécessaires.

La logique de modale est un peu redondante

follow-up à #26

Actuellement, on créé une modale par TripProposal, alors qu'il ne devrait y en avoir qu'une pour toute la page

On pourrait créer la modale tout en haut et on remplirait la modale en fonction de ce qu'il y a dans le store

Les positions des villes sont calculées au moment d'une recherche

On peut imaginer que la requête à /driver-trip-proposals pourrait retourner aussi les positions pour chaque origine et destination des propositions.
Ce qui implique aussi de revoir la fonction setAndPrepareForTripRequest(tripRequest) qui serait réduite à rechercher les positions des origine et destination d'une requête. Ces places pouvant aussi déjà être dans la liste positionByPlace.
On laissera la notion de status de la requête de côté dans un premier temps.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.