Skip to content

RamziHaddad/projet-soa-ecommerce-enit-2024-3AINFO2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# projet-soa-ecommerce-enit-v1


# Liste des microservices
- catalog: responsable des produits exposés et de leurs caractéristiques + prix de référence
- pricing: responsable de déterminer le prix d'un produit ou d'un ensemble de produits (idProduit+quantité). utiliser pour déterminer le prix d'un panier ou d'une commande.
  - gère la liste des prix des produits
  - gère les promotions (idProduit+pourcentage de réduction)
- inventory : responsable de la gestion des quantités de produits dans le stock (idProduit+quantité totale + quantité reservée)
      - enregistrer une reception d'un produit
      - enregistrer la sortie d'une commande.
  - la réservation de produits d'une commande en attente de paiement.
  - la libération des produits d'une commande annulée
- search : 
  - indexer la description d'un produit (idProduit+description)
  - recherche d'un produit via texte libre
  - recherche des produits similaires à un produit (idProduit)
  - une base de données adptés est à utiliser (apache solr déjà configuré dans docker-compose mais peut être remplaé par ElasticSearch si le groupe le veut)
- cart : gestion du panier
- order : gère le processus de commande depuis la validation du panier, à la reservation, au paiement jusqu'au déclenchement de la livraison.
- payment : gère les cartes des clients et les transactions avec la banque
  - gère un ensemble de cartes bancaires associées aux clients (idUser,codeCarte,CodeSecret).
  - reçoit l'ordre de paiement depuis le microservice Order et tente de le faire chez la banque.
- shipping :  responsable de la livraison d'une commande payée 
  - gère un ensemble de d'adresses associées aux clients (idUser,adresse).
  - reçoit l'ordre de livraison du microservice order après paiement.
  - permet de gérer le cycle d'une livraison (livraison en attente, livraison en cours, livraison effectuée)
- review : responsable des avis (commentaires) sur les produits:
    - donner un avis
    - récupérer les avis sur un produit
- rating : responsable des notes que donnent les utilisateurs aux produits
    - donner une note à un produit
    - récupérer les notes d'un utilisateur
    - récupérer les notes d'un produit
- mailing : (voir [le service mailtrap](https://mailtrap.io/) et [l'exemple](https://quarkus.io/guides/mailer))
  - gère les emails des clients
  - gère les templates des emails dans la BD (id+text). Le texte d'un template est un texte normal mais qui contient des variables dedans. ces variables sont remplacées par les variables fournies par l'appel au  web service d'envoi d'email ou par les champs du message si l'envoi est déclenché de manière asynchrone.
  - deux approches sont possibles au choix
    - l'envoie des emails se fait en réaction à des messages reçus (n'est pas recommandée si les autres microservices ne publient pas de messages).
    - l'envoi des emails se fait de manière synchrone via Web service qui est appelé par les autres quand ils veulent envoyer un email. ils fournissent idTemplate+map<NomVariable,Valeur>. (c'est ce qui est recommandé pour ce projet.)
- IAM contient une config OIDC sur keycloack (configuré sur docker-compose). s'il y a un groupe pour ce microservice alors vers la fin, ils doivent aider tous les autres à utiliser JWT pour sécuriser leurs microservices. 
- bank : service externe fourni tel quel (non  à utiliser pour expérimenter les problèmes).
  - ceservice est configurable par deux paramètres dans le fichier application.properties.
    - un paramètre permet d'augmenter le temps de traitement et tester ainsi les timeouts
    - un paramètre permet de simuler une non fiabilité avec une probabilité d'erreur pour tester la résilience des autres microservices. 
  - au début tester vos appels sans problèmes puis augmentez les valeurs pour le rendre plus capricieux et voir comment votre microservice de paiement se comporte ainsi que les autres qui y dépendent indirectement.
# ports
Respecter les ports de chaque microservice
- cart : 8081
- catalog : 8082
- inventory : 8083
- order : 8084
- payment : 8085
- pricing : 8086
- recommendation: 8087
- review : 8088
- search : 8089
- shipping : 8090
- mailing: 8091
- -bank: 8099

# Technologies
- données transactionnelles : postgresql (base par microservice déjà configurée dans docker-compose)
- index externe pour le texte (solr) : s'inspirer du [tutoriel suivant](https://www.baeldung.com/apache-solrj). possibilité de remplacer par elasticsearch si besoin.
- base de données en mémoire : utiliser une map java en mémoire dans la première version.

# Prérequis:
- java 17 ou plus (variable JAVA_HOME configurée)
- - Git
- [SDKman](https://sdkman.io/) : facilite l'installation de java, de quarkus CLI et de maven.
- [quarkus CLI](https://quarkus.io/guides/cli-tooling) facilitent la [création](https://quarkus.io/guides/cli-tooling#project-creation) d'applications quarkus.
- maven récent (variable MAVEN_HOME configurée)
- docker (avec WSL sur windows mais plus facile sur linux)
- VS code avec les extensions java quarkus docker redhat
- démarrer dans le terminal (interne à vscode) en mode developpement avec la commande mvn clean compile quarkus:dev
- la configuration est dans le fichier application.properties
- par defaut l'application tourne sur localhost:PORT (l'interface qui s'affiche contient un lien vers dev-ui qui liste les extensions/modules installés)
- dev-ui donne l'accès à swagger pour tester les APIs
- pour lancer l'infrastructure sur docker click droit dans le fichier docker-compose et faire docker compose up

pour voir d'autres exemples avec la doc aller sur [la documentation](https://quarkus.io/guides/)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published