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.
- 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.
git clone https://github.com/AlessGarau/velybLancer 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 upLancer 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 allEnfin, accédez à l'interface à l'adresse http://localhost:8000
- Python
- Framework Flask
- Template Engine Jinja
- JavaScript
- Leaflet & OpenStreetMap
Le projet est composé de plusieurs microservices pour assuré la modularité de chaque partie et une facilité à collaborer.
Il s'agit de la pierre angular du projet, où tous les services se rassemblent pour créer notre interface.
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_authentifications'occupe des stories liés à l'authentification, consommable àhttp://localhost:8001/api/authentificationmicroservices_favorites'occupe des stories liés aux stations favorites, consommable àhttp://localhost:8002/api/favoritesmicroservices_users'occupe des stories liés à l'user, consommable àhttp://localhost:8003/api/users
