PCBuilder est une application Java en console permettant de composer, enregistrer et exporter des configurations PC à partir d'un catalogue de composants maintenu dans un fichier CSV. L'application propose une interface textuelle guidée qui accompagne l'utilisateur dans la sélection de chaque pièce, avec des outils de tri, de filtrage et de limitation des résultats.
- Parcours guidé : menu interactif pour créer une nouvelle configuration ou gérer les configurations sauvegardées.
- Catalogue riche : plus de 36 000 références issues de
src/main/resources/data/components.csv, couvrant CPU, GPU, RAM, stockage, cartes mères, boîtiers et alimentations. - Filtres dynamiques : sélection d'une catégorie puis application de tris (croissant/décroissant) sur les attributs pertinents (prix, fréquence, capacité, etc.) et limitation du nombre de résultats.
- Sauvegarde en mémoire : conservation temporaire des PC construits durant la session, avec possibilité de les recharger pour continuer les modifications.
- Export JSON : génération d'un fichier JSON regroupant toutes les configurations sauvegardées via l'exportateur
JsonComputerExporter.
Le code suit une séparation en couches inspirée de l'architecture hexagonale :
domain/: entités métier immutables (CPU, GPU, Computer, etc.).application/: cas d'usage orchestrant les interactions (sélection de composants, ajout d'une configuration, export...).infrastructure/: implémentations techniques (lecture du CSV, export JSON, contrôleur principal).presentation/: présentateurs et vues console responsables de l'affichage et de la collecte des entrées utilisateur.shared/: définitions communes, notamment les énumérations de catégories et paramètres de requête. Cette organisation permet de remplacer facilement une source de données (CSV → API) ou une vue (console → interface graphique) sans impacter le cœur métier.
- Java 21 (ou version compatible avec le paramètre
maven.compiler.targetdupom.xml). - Apache Maven 3.9+.
- Cloner le dépôt :
git clone <URL_DU_DEPOT> cd PCBuilder
- Télécharger les dépendances et compiler :
mvn clean package
Lancer l'application console depuis l'artefact construit :
java -cp target/PCBuilder-1.0-SNAPSHOT.jar fr.esiea.pcbuilder.Main- Sélectionner
cpour créer/configurer un PC. - Choisir un composant (1 à 7) parmi CPU, GPU, RAM, Stockage, Carte mère, Alimentation ou Boîtier.
- Ajuster les filtres :
fpour modifier la liste des tris disponibles sur la catégorie courante (prix, fréquence, capacité...).lpour changer la limite de résultats (par défaut 10).
- Saisir le numéro du composant souhaité pour l'ajouter à la configuration courante.
- Répéter pour chaque catégorie, puis :
spour sauvegarder la configuration dans la session en cours.cpour charger une configuration précédemment sauvegardée.zpour revenir au menu principal.
- Depuis le menu principal, choisir
e. - Indiquer le chemin du fichier de sortie (l'extension
.jsonest ajoutée automatiquement si absente). - Le fichier JSON contiendra toutes les configurations sauvegardées durant la session.
Le catalogue par défaut est un fichier CSV (src/main/resources/data/components.csv) comprenant les colonnes suivantes (extrait) :
| Colonne | Description |
|---|---|
category |
Type de composant (case, cpu, video_card, etc.). |
name |
Nom commercial du composant. |
price |
Prix indicatif en euros. |
grade |
Note agrégée provenant de la source d'origine. |
| Champs spécifiques | Fréquences (core_clock, boost_clock), capacités, etc., selon la catégorie. |
+Vous pouvez enrichir ou remplacer ce fichier pour utiliser votre propre catalogue. La lecture est assurée par CsvComponentRepository, basé sur Apache Commons CSV.
Le projet inclut une couverture de tests unitaires et d'intégration (JUnit 4/5, Mockito) pour valider les cas d'usage, les entités et les opérations d'import/export. Pour les exécuter :
mvn testPCBuilder/
├── pom.xml
└── src/
├── main/
│ ├── java/fr/esiea/pcbuilder/
│ │ ├── application/
│ │ ├── domain/
│ │ ├── infrastructure/
│ │ ├── presentation/
│ │ └── shared/
│ └── resources/data/components.csv
└── test/java/fr/esiea/pcbuilder/