0% ont trouvé ce document utile (0 vote)
11 vues6 pages

Java

Le document décrit une application de gestion de réservations et d'utilisateurs, structurée autour de DTOs, entités JPA, mappers, repositories, services et contrôleurs REST. Il inclut des fonctionnalités pour créer, mettre à jour, supprimer et récupérer des réservations et des salles, tout en intégrant des appels à des microservices externes via WebClient. Les composants principaux incluent des classes pour gérer les réservations, les salles et les utilisateurs, ainsi qu'une application front-end en React pour interagir avec ces fonctionnalités.

Transféré par

yosraichraq
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
11 vues6 pages

Java

Le document décrit une application de gestion de réservations et d'utilisateurs, structurée autour de DTOs, entités JPA, mappers, repositories, services et contrôleurs REST. Il inclut des fonctionnalités pour créer, mettre à jour, supprimer et récupérer des réservations et des salles, tout en intégrant des appels à des microservices externes via WebClient. Les composants principaux incluent des classes pour gérer les réservations, les salles et les utilisateurs, ainsi qu'une application front-end en React pour interagir avec ces fonctionnalités.

Transféré par

yosraichraq
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Description des classes et fonctionnalités :

1. DTOs (Data Transfer Objects) :

● ReservationDTO : Représente une réservation avec des informations comme l'ID, la date, l'heure, et les détails des salles et des
utilisateurs associés.
● ReservationReq : Utilisé pour les requêtes de réservation. Contient la date, l'heure, l'ID des salles et l'ID de l'utilisateur. C'est la structure
de données envoyée par le client.
● SalleDTO : Représente une salle, avec un ID, un nom, une capacité, et des équipements.
● UtilisateurDTO : Représente un utilisateur, avec un ID, un nom et un email.

2. Entité de la Réservation :

● Reservation : Représente une entité de réservation dans la base de données, avec des informations telles que l'ID, la date, l'heure, les
IDs des salles et des utilisateurs. Les informations sont récupérées et mises à jour à partir de la base de données.

3. Mapper :

● ReservationMapper : Classe responsable de la conversion des objets entre les différents formats :
○ De ReservationReq à Reservation (pour l'enregistrement en base).
○ De Reservation à ReservationDTO (pour l'envoi des données à l'utilisateur).
○ De Reservation à ReservationReq (pour la mise à jour des réservations).

4. Repository :

● ReservationRepo : Interface de gestion des données de réservation en utilisant JPA (Java Persistence API). Elle permet de trouver des
réservations par salle ou utilisateur.

5. Services :

● ReservationService : Interface définissant les méthodes de service pour gérer les réservations (ajouter, modifier, supprimer, récupérer
des réservations).
● ReservationServiceImpl : Implémentation du service qui gère la logique métier :
○ Ajout d'une nouvelle réservation.
○ Mise à jour d'une réservation existante.
○ Suppression d'une réservation.
○ Récupération de toutes les réservations ou filtrées par salle ou utilisateur.

Les données des réservations incluent des appels à des services externes (par exemple, pour récupérer les informations des salles et des
utilisateurs via WebClient). Ces services externes sont intégrés dans la méthode getAllReservation pour enrichir les données avec les
informations des salles et utilisateurs.

6. Controller :

● ReservationController : Le contrôleur exposant des points de terminaison REST pour interagir avec les réservations. Il inclut des routes
pour :
○ Ajouter une réservation (/add).
○ Récupérer une réservation par ID (/{id}).
○ Récupérer toutes les réservations (/reservations).
○ Mettre à jour une réservation existante (/{id} avec PUT).
○ Supprimer une réservation (/{id} avec DELETE).
○ Filtrer les réservations par ID de salle (/reservationbyidsalle/{id}).
○ Filtrer les réservations par ID utilisateur (/reservationbyiduser/{id}).

Remarque technique :

● WebClient est utilisé pour effectuer des appels HTTP synchrones afin de récupérer les informations des salles et des utilisateurs
associés à une réservation, en faisant appel à d'autres microservices (MSSALLE pour les salles et MSUTILISATEURS pour les
utilisateurs).

Fonctionnalités principales :
1. Création de réservations : Permet aux utilisateurs de réserver des salles avec des informations comme la date, l'heure et l'utilisateur.
2. Mise à jour et suppression de réservations : Permet de modifier ou de supprimer une réservation existante.
3. Récupération de réservations par critères : Permet de récupérer les réservations en fonction d'une salle ou d'un utilisateur.

Classes et structures de données :

1. DTOs (Data Transfer Objects) :

● ReservationDTO : Contient des informations sur la réservation, telles que l'ID de la réservation, la date, l'heure, et la liste des
utilisateurs associés à cette réservation.
● SalleDTO : Contient des informations sur une salle, comme l'ID, le nom, la capacité, l'équipement, et les réservations associées à cette
salle.
● SalleReq : Utilisé pour créer ou mettre à jour une salle, avec des informations sur le nom, la capacité et l'équipement.
● UtilisateurDTO : Contient des informations sur un utilisateur, telles que l'ID, le nom et l'email.

2. Entité de la Salle :

● Salle : Représente une salle en base de données, avec des propriétés comme l'ID, le nom, la capacité et l'équipement.

3. Mapper :

● SalleMapper : Cette classe permet de convertir entre les entités et les DTOs :
○ toDto(Salle salle) : Convertit une entité Salle en un DTO SalleDTO.
○ fromSalleReq(SalleReq salleReq) : Convertit un DTO SalleReq en une entité Salle pour l'enregistrement dans la
base de données.

4. Repository :

● SalleRepo : Utilise JPA pour interagir avec la base de données et effectuer des opérations CRUD sur les salles (recherche par ID,
ajout, mise à jour, suppression).

5. Services :

● SalleService : Interface qui définit les opérations disponibles pour gérer les salles, y compris l'ajout, la mise à jour, la suppression et
la récupération des salles et de leurs réservations.
● SalleServiceImpl : Implémentation du service SalleService qui contient la logique métier :
○ Récupérer une salle par ID.
○ Ajouter une nouvelle salle.
○ Mettre à jour une salle existante.
○ Supprimer une salle.
○ Obtenir une salle avec ses réservations via un appel à un autre microservice (MSRESERVATION).

La méthode getReservationDTOById(Long id) permet d'obtenir les réservations associées à une salle donnée en faisant un appel HTTP via
WebClient à un autre service (MSRESERVATION).

6. Controller :

● SalleController : Expose les endpoints REST pour interagir avec les salles. Les routes incluent :
○ POST /api/salle/add : Ajouter une nouvelle salle.
○ GET /api/salle/{id} : Récupérer une salle par ID.
○ GET /api/salle/salles : Récupérer la liste de toutes les salles.
○ PUT /api/salle/{id} : Mettre à jour une salle existante.
○ DELETE /api/salle/{id} : Supprimer une salle par ID.
○ GET /api/salle/SalleReservation/{id} : Obtenir les réservations d'une salle par ID.

Flux de travail général :


1. Ajout d'une salle :
○ Lorsqu'une nouvelle salle est ajoutée via l'endpoint POST /api/salle/add, un objet SalleReq est reçu, converti en une
entité Salle et enregistré dans la base de données.
2. Mise à jour d'une salle :
○ Une salle existante peut être mise à jour via l'endpoint PUT /api/salle/{id}. Les informations de la salle sont récupérées,
mises à jour et enregistrées dans la base.
3. Suppression d'une salle :
○ Une salle peut être supprimée via l'endpoint DELETE /api/salle/{id}, où l'ID de la salle est fourni.
4. Récupération des réservations d'une salle :
○ Via l'endpoint GET /api/salle/SalleReservation/{id}, une salle est récupérée, puis les réservations associées sont
obtenues en faisant un appel à un autre microservice (via WebClient) qui renvoie un tableau de ReservationDTO.

WebClient :
Le WebClient est utilisé pour interroger un autre microservice (MSRESERVATION) pour récupérer les réservations associées à une salle. Cela
permet de récupérer des informations en temps réel sur les réservations de chaque salle.

Explication du processus de gestion des réservations :


● Lorsqu'une demande pour une salle avec ses réservations est effectuée (GET /api/salle/SalleReservation/{id}), le service
SalleServiceImpl interroge l'API des réservations pour récupérer les données.
● Ces réservations sont ensuite associées à la salle dans un objet SalleDTO qui est retourné à l'utilisateur via l'API REST.

1. DTO (Data Transfer Object) Classes


Les classes ReservationDTO, SalleDTO, UtilisateurDTO, UtilisateurReq sont des objets de transfert de données (DTO). Elles sont
utilisées pour transférer des données entre les différentes couches de l'application (par exemple, entre la couche de service et la couche de
présentation ou API).

● ReservationDTO : Représente une réservation, avec des informations telles que l'ID, la date, l'heure, et une liste de salles associées à
la réservation.
● SalleDTO : Représente une salle, avec des informations comme l'ID, le nom, la capacité et l'équipement disponible dans la salle.
● UtilisateurDTO : Représente un utilisateur avec son ID, son nom, son email et une liste de réservations associées à l'utilisateur.
● UtilisateurReq : C'est un DTO utilisé pour recevoir les informations nécessaires à la création d'un utilisateur (nom, email), sans l'ID.

Les annotations utilisées dans ces classes viennent de Lombok, un outil qui simplifie le code Java en générant automatiquement des méthodes
courantes (comme getters, setters, toString, equals, et hashCode) à l'aide d'annotations :

● @Data génère des getters, setters, toString, equals, et hashCode.


● @AllArgsConstructor crée un constructeur avec tous les paramètres.
● @NoArgsConstructor crée un constructeur sans paramètres.
● @Builder permet de construire un objet avec un modèle de conception "builder".

2. Entities
Les classes comme Utilisateur sont des entités JPA, utilisées pour la persistance des données dans la base de données.

● Utilisateur : Représente un utilisateur dans la base de données avec des champs comme id, nom, et email. L'annotation @Entity
indique qu'il s'agit d'une entité JPA.
● @Id et @GeneratedValue(strategy = [Link]) indiquent que le champ id est la clé primaire et qu'il sera
généré automatiquement.

3. Mappers
Les classes comme UserMappers sont responsables de la conversion entre les entités (Utilisateur) et les DTO (UtilisateurDTO et
UtilisateurReq).

● toDto() : Convertit une entité Utilisateur en un DTO UtilisateurDTO.


● fromUtilisateurReq() : Convertit un DTO UtilisateurReq en une entité Utilisateur en utilisant
[Link], ce qui copie les propriétés correspondantes entre les deux objets.

4. Repositories
La classe UtilisateurRepo est un repository Spring Data JPA qui permet d'effectuer des opérations CRUD sur les entités Utilisateur. Elle
étend JpaRepository, ce qui offre des méthodes intégrées comme findById(), save(), etc.

5. Services
Les classes comme UtilisateurService et UtilisateurServiceImp contiennent la logique métier. Elles appellent les repositories pour
interagir avec la base de données et les mappers pour convertir les données.

● getUtilisateurById() : Récupère un utilisateur par son ID.


● getAllUtilisateurs() : Récupère tous les utilisateurs.
● addUtilisateur() : Ajoute un nouvel utilisateur.
● updateUtilisateur() : Met à jour un utilisateur existant.
● deleteUtilisateur() : Supprime un utilisateur par son ID.
● getReservationDTOById() : Récupère un utilisateur et ses réservations associées via une requête API externe (via WebClient).

WebClient est utilisé pour envoyer des requêtes HTTP de manière réactive, ici pour interagir avec un microservice de réservations.

6. Controllers
La classe UtilsateurController expose des points d'API REST pour interagir avec l'application :

● @PostMapping("/add") : Crée un utilisateur.


● @GetMapping("/{id}") : Récupère un utilisateur par son ID.
● @PutMapping("/{id}") : Met à jour un utilisateur.
● @DeleteMapping("/{id}") : Supprime un utilisateur.
● @GetMapping("/userReservation/{id}") : Récupère un utilisateur et ses réservations associées en appelant la méthode
getReservationDTOById() du service.

7. Application principale (MsUtilisateursApplication)


Cette classe configure et lance l'application Spring Boot avec les annotations :

● @SpringBootApplication : Démarre l'application Spring Boot.


● @Bean et @LoadBalanced : Configure un WebClient pour effectuer des requêtes HTTP avec la possibilité d'être équilibré via un load
balancer (probablement pour les appels inter-services dans une architecture microservices).

Conclusion
Ces codes construisent une application qui gère les utilisateurs, leurs réservations et intègre plusieurs microservices pour récupérer des
informations sur les réservations. Les principaux composants sont les entités JPA, les DTO, les services, les repositories et les contrôleurs REST
pour exposer des endpoints. Les appels API externes sont gérés avec WebClient.
1. DTOs (Data Transfer Objects) :
Ces classes sont utilisées pour structurer et transporter des données entre les différentes couches de l'application. Elles sont également annotées
avec des annotations Lombok pour générer automatiquement des méthodes telles que les constructeurs, les accesseurs et les mutateurs, ainsi
que d'autres fonctionnalités.

● ReservationDTO : Représente une réservation, incluant un identifiant, une date, une heure et une liste de salles associées.
● SalleDTO : Représente une salle avec un identifiant, un nom, une capacité et un équipement.
● UtilisateurDTO : Représente un utilisateur avec un identifiant, un nom, un email, et une liste de réservations.
● UtilisateurReq : Représente la demande de création d'un utilisateur, contenant le nom et l'email.

2. Entité JPA (Utilisateur) :

● Utilisateur : Entité représentant un utilisateur dans la base de données, avec un identifiant, un nom et un email. Elle est mappée à
une table de la base de données via @Entity.

3. Mapper (pour la conversion entre entités et DTOs) :


● UserMappers : Classe utilisée pour convertir entre les objets Utilisateur (entité) et UtilisateurDTO (DTO), ainsi qu'entre
UtilisateurReq et Utilisateur pour la création de nouveaux utilisateurs.

4. Repository (pour l'accès à la base de données) :


● UtilisateurRepo : Interface qui étend JpaRepository pour permettre les opérations CRUD sur l'entité Utilisateur via Spring
Data JPA.

5. Services :
● UtilisateurService : Interface définissant les méthodes de service pour gérer les utilisateurs (ajout, récupération, mise à jour,
suppression).
● UtilisateurServiceImp : Implémentation de l'interface UtilisateurService, avec la logique métier pour gérer les utilisateurs et
leurs réservations. Cette classe inclut la gestion des utilisateurs, leur mise à jour, leur suppression, et l'intégration avec un microservice
de réservations via WebClient pour obtenir les réservations associées à un utilisateur.

6. Web Client (pour la communication entre microservices) :


● WebClient : Utilisé pour effectuer des appels HTTP vers d'autres services (par exemple, récupérer les réservations d'un utilisateur dans
un autre microservice). Ce client réactif est configuré dans la classe MsUtilisateursApplication.

7. Contrôleur Web (UtilisateurController) :

● UtilisateurController : Classe de contrôleur REST exposant les API pour manipuler les utilisateurs. Elle permet d'ajouter, de
mettre à jour, de supprimer, et de récupérer des utilisateurs, ainsi que d'obtenir un utilisateur avec ses réservations associées.

8. Application Spring Boot :


● MsUtilisateursApplication : Classe principale qui démarre l'application Spring Boot. Elle configure également un WebClient
avec une connectivité réactive pour appeler d'autres services dans l'architecture microservices.
Le code présente une application React permettant de gérer des réservations et l'authentification des utilisateurs. Voici les principaux composants :

1. Composant Reservation :
○ Ce composant permet de visualiser et de gérer les réservations. Il affiche une liste de réservations avec des informations
comme la date, l'heure, la salle et l'utilisateur.
○ Il propose des actions telles que l'ajout, la modification, et la suppression des réservations, utilisant des requêtes HTTP via
axios.
○ Lors de la suppression d'une réservation, une confirmation est demandée via SweetAlert2.
○ Un modal permet à l'utilisateur d'ajouter ou de modifier une réservation.
2. Composant PrivateRoute :
○ Ce composant protège les routes qui nécessitent une authentification. Si l'utilisateur n'est pas connecté (pas de token), il est
redirigé vers la page d'accueil.
3. Composant Login :
○ Ce composant gère l'authentification des utilisateurs (connexion et inscription). Il utilise un formulaire avec des champs pour
l'email, le mot de passe, et d'autres informations pour l'inscription.
○ Selon l'état de connexion, il alterne entre le mode de connexion et celui d'inscription.
○ En cas de succès, l'utilisateur est redirigé vers la page d'accueil et le token d'authentification est stocké dans le local storage.

Fonctionnement :
● Authentification : L'utilisateur peut se connecter ou s'inscrire via un formulaire. Un token JWT est stocké localement pour maintenir la
session.
● Gestion des réservations : L'administrateur peut ajouter, modifier ou supprimer des réservations avec une interface de type tableau. Un
modal est utilisé pour saisir les informations de réservation (date, heure, salle, utilisateur).
● Sécurisation : Certaines pages sont protégées par PrivateRoute, ce qui empêche l'accès sans authentification valide.

Dépendances :
● axios : Pour les appels API.
● react-bootstrap : Pour les composants d'interface utilisateur (modals, tableaux, boutons).
● sweetalert2 : Pour afficher les alertes de confirmation.
● react-icons : Pour les icônes utilisées dans les boutons.

Le code est structuré pour être réactif, avec un état qui gère les données des réservations et la logique de gestion de l'authentification.

Vous aimerez peut-être aussi