Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

TourGuide — Projet d’Optimisation, Concurrence & CI/CD

(Projet OpenClassrooms - Java Path EN - P8)

🧭 Objectif du projet

L’application TourGuide permet :

d’obtenir les attractions touristiques proches,

de recevoir des récompenses via RewardCentral,

d’obtenir des offres de voyage personnalisées.

Le projet avait plusieurs défis majeurs :

Corriger les tests qui échouaient

Implémenter correctement les 5 attractions les plus proches

Résoudre des erreurs de concurrence (ConcurrentModificationException)

Optimiser les performances massives (100 000 utilisateurs)

Mettre en place un pipeline CI/CD GitHub Actions

Finaliser les livrables & documentation

✅ Étape 2 : Résumé clair de tout ce qui a été corrigé ✔️ Étape 2 — Correction des tests & problèmes de concurrence

Problèmes rencontrés :

ConcurrentModificationException lors du calcul des récompenses

Tests qui échouaient car RewardService utilisait mal les listes

Mauvaise gestion de l’historique utilisateur

Solutions apportées :

Remplacement de certaines listes par CopyOnWriteArrayList

Correction de l’algorithme calculateRewards

Stabilisation du comportement du service

Aucun test modifié, seulement la logique métier

✔️ Étape 3 — Implémentation des 5 attractions les plus proches

Suppression du @Ignore dans TestTourGuideService

Ajout d’une vraie logique : tri par distance

Ajout d’un JSON structuré dans le controller

Résultat conforme au TODO du projet

✔️ Étape 4 — Performance (objectif < 20 minutes)

Problème initial :

Le service RewardService recalculait toutes les attractions pour toutes les positions

Résultat : 40+ minutes pour 100 000 utilisateurs

Optimisations :

Utilisation de CompletableFuture

Limitation des appels RewardCentral avec Semaphore

Parallélisation contrôlée avec un ThreadPool 100 threads

calculateRewards ne regarde plus que la dernière position

Les tests passent maintenant :

trackLocation ≈ 200s

getRewards ≈ 500s

✔️ Étape 5 — Pipeline CI GitHub Actions

Mise en place d’un workflow CI :

Build Maven

Tests unitaires (TestPerformance désactivé)

Packaging JAR

Upload de l’artefact

Problèmes rencontrés :

Maven exécuté dans le mauvais répertoire

Dépendances tierces (gpsUtil, TripPricer, RewardCentral) non présentes

Correction via dossier libs/ + installation manuelle

Résultat : pipeline opérationnel et vert ✔️

✔️ Étape 6 — Livrables & Documentation

Livrables fournis :

Code propre et commenté

README complet

historique.txt pour tracking

CI/CD fonctionnel

Tests automatisés stables

Logique métier respectée

🚀 Comment exécuter le projet Prérequis

Java 17

Maven 3.8+

Git

Compilation

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages