Skip to content

AlessGarau/Velyb

Repository files navigation

Velyb

Introduction

Le projet Velyb est une application web développée en Python à l'aide du framework Flask et du moteur de template Jinja. Son objectif est de fournir une interface conviviale pour visualiser les stations Vélib disponibles dans la ville de Paris.

alt text

Fonctionnalités

  • Consultation des stations Vélib sur une carte interactive.
  • Visualisation des détails de chaque station (nombre de vélos disponibles, types de vélos disponibles, et nombre de places libres).
  • Gestions de stations favorites.
  • Création d'un compte utilisateur.
  • Modification des informations personnelles de l'utilisateur.

Installation

git clone https://github.com/AlessGarau/velyb

Lancer avec Docker

# Lancer ce script | adapter la commande pour votre terminal (bash \ shell..)
source generate-database-access-layer.sh user & source generate-database-access-layer.sh favorite & source generate-database-access-layer.sh authentification

# Composer le projet
docker compose up

Lancer sans Docker

# Importer la base de donnée, via votre site admin ou le CLI
mysql -u root -p velyb < script.sql

# Mettre en place les .env dans toutes les apps en suivant les instructions des .env.example

# Prépation des dossiers et lancement des processus
source ./setup.sh all

Enfin, accédez à l'interface à l'adresse http://localhost:8000

Tech

Technologies

  • Python
  • Framework Flask
  • Template Engine Jinja
  • JavaScript
  • Leaflet & OpenStreetMap

Architecture

Le projet est composé de plusieurs microservices pour assuré la modularité de chaque partie et une facilité à collaborer.

Serveur de templating

Il s'agit de la pierre angular du projet, où tous les services se rassemblent pour créer notre interface.

Serveur de cache, avec protocol de communication TCP

Pour contourner la contrainte de création d'un protocol TCP pour servir les données du cache, nous avons crée un protocol mimant des requêtes HTTP. Grâce à cette stratégie, nous n'avons pas eu besoin de supplémentaire pour adapter nos autres services pour communiquer avec le serveur de cache.

Grâce au Design Pattern Facade, notre code permettrait de créer facilement des instances de serveur de cache.

""" 
Voici la classe permettant de CACHE les données OpenData, 
héritant de notre classe CacheProtocol et de sa méthode abstrait set_cache()
"""

class OpenDataCache(CacheProtocol):
    VELIB_COUNT = 0

    def __init__(self, ADDRESS_HOST, PORT_DEFAULT, endpoint_to_cache: str, delay: int) -> None:
        super().__init__(ADDRESS_HOST, PORT_DEFAULT, endpoint_to_cache, delay)

    def set_cache(self) -> None:
        res = requests.get(self.API_URL).json()
        self.VELIB_COUNT = res.get('total_count')
        offset = self.VELIB_COUNT

        while (offset >= 100):
            next_res = requests.get(self.API_URL + f"&offset={self.VELIB_COUNT - offset if offset > 200 else offset}").json()
            res["results"].extend(next_res["results"])
            offset -= 100

        self.CACHE = json.dumps(res)

Microservices

  • microservices_authentification s'occupe des stories liés à l'authentification, consommable à http://localhost:8001/api/authentification
  • microservices_favorite s'occupe des stories liés aux stations favorites, consommable à http://localhost:8002/api/favorites
  • microservices_user s'occupe des stories liés à l'user, consommable à http://localhost:8003/api/users

Ressources:

Auteurs

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors