diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..7bc07ec
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Environment-dependent path to Maven home directory
+/mavenHomeManager.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml
new file mode 100644
index 0000000..afc61f9
--- /dev/null
+++ b/.idea/checkstyle-idea.xml
@@ -0,0 +1,16 @@
+
+
+
+ 12.1.0
+ JavaOnly
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..c47557a
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..9dc782b
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/fr/diginamic/tp_grasps/ReservationController.java b/src/main/java/fr/diginamic/tp_grasps/ReservationController.java
index a6b8bd9..983643a 100644
--- a/src/main/java/fr/diginamic/tp_grasps/ReservationController.java
+++ b/src/main/java/fr/diginamic/tp_grasps/ReservationController.java
@@ -1,77 +1,87 @@
package fr.diginamic.tp_grasps;
import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
+import java.util.Currency;
+
import fr.diginamic.tp_grasps.beans.Client;
import fr.diginamic.tp_grasps.beans.Reservation;
import fr.diginamic.tp_grasps.beans.TypeReservation;
-import fr.diginamic.tp_grasps.daos.ClientDao;
-import fr.diginamic.tp_grasps.daos.TypeReservationDao;
+import fr.diginamic.tp_grasps.daos.IClientDao;
+import fr.diginamic.tp_grasps.daos.ITypeReservationDao;
+import fr.diginamic.tp_grasps.daos.impl.ClientDao;
+import fr.diginamic.tp_grasps.daos.impl.TypeReservationDao;
+import fr.diginamic.tp_grasps.factory.IReservationFactory;
+import fr.diginamic.tp_grasps.factory.impl.ReservationFactory;
+import fr.diginamic.tp_grasps.services.IReservationService;
+import fr.diginamic.tp_grasps.services.impl.ReservationService;
+import fr.diginamic.tp_grasps.utils.DateUtils;
/** Controlleur qui prend en charge la gestion des réservations client
* @author RichardBONNAMY
*
*/
public class ReservationController {
-
+
/** formatter */
- private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
-
- /** DAO permettant d'accéder à la table des clients */
- private ClientDao clientDao = new ClientDao();
-
- /** DAO permettant d'accéder à la table des types de réservation */
- private TypeReservationDao typeReservationDao = new TypeReservationDao();
-
- /** Méthode qui créée une réservation pour un client à partir des informations transmises
+ //private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
+
+ /**
+ * DAO permettant d'accéder à la table des clients
+ */
+ private IClientDao clientDao = new ClientDao();
+
+ /**
+ * DAO permettant d'accéder à la table des types de réservation
+ */
+ private ITypeReservationDao typeReservationDao = new TypeReservationDao();
+
+ /**
+ * DAO permettant d'accéder à la table réservation
+ */
+ private IReservationFactory reservationFactory = new ReservationFactory();
+
+ /**
+ * Services métier pour la réservation
+ */
+ private IReservationService reservationService = new ReservationService();
+
+
+ /**
+ * Méthode qui créée une réservation pour un client à partir des informations transmises
+ *
* @param params contient toutes les infos permettant de créer une réservation
* @return Reservation
*/
public Reservation creerReservation(Params params) {
-
+
// 1) Récupération des infos provenant de la classe appelante
String identifiantClient = params.getIdentifiantClient();
String dateReservationStr = params.getDateReservation();
String typeReservation = params.getTypeReservation();
int nbPlaces = params.getNbPlaces();
-
+
// 2) Conversion de la date de réservation en LocalDateTime
- LocalDateTime dateReservation = toDate(dateReservationStr);
-
+
+ LocalDateTime dateReservation = DateUtils.formatStringToDateTime(dateReservationStr);
+
// 3) Extraction de la base de données des informations client
Client client = clientDao.extraireClient(identifiantClient);
-
+
// 4) Extraction de la base de données des infos concernant le type de la réservation
TypeReservation type = typeReservationDao.extraireTypeReservation(typeReservation);
-
+
// 5) Création de la réservation
- Reservation reservation = new Reservation(dateReservation);
- reservation.setNbPlaces(nbPlaces);
- reservation.setClient(client);
-
+ Reservation reservation = reservationFactory.getInstance(dateReservation, client, nbPlaces);
+
// 6) Ajout de la réservation au client
client.getReservations().add(reservation);
-
+
// 7) Calcul du montant total de la réservation qui dépend:
// - du nombre de places
// - de la réduction qui s'applique si le client est premium ou non
- double total = type.getMontant() * nbPlaces;
- if (client.isPremium()) {
- reservation.setTotal(total*(1-type.getReductionPourcent()/100.0));
- }
- else {
- reservation.setTotal(total);
- }
- return reservation;
- }
+ reservation.setTotal(reservationService.calculeMontantReservation(client, type, reservation));
- /** Transforme une date au format String en {@link LocalDateTime}
- * @param dateStr date au format String
- * @return LocalDateTime
- */
- private LocalDateTime toDate(String dateStr) {
-
- return LocalDateTime.parse(dateStr, formatter);
+ return reservation;
}
}
diff --git a/src/main/java/fr/diginamic/tp_grasps/beans/Reservation.java b/src/main/java/fr/diginamic/tp_grasps/beans/Reservation.java
index e8a82c2..f29406f 100644
--- a/src/main/java/fr/diginamic/tp_grasps/beans/Reservation.java
+++ b/src/main/java/fr/diginamic/tp_grasps/beans/Reservation.java
@@ -8,8 +8,8 @@
import javax.persistence.ManyToOne;
@Entity
-public class Reservation {
-
+public class Reservation {
+
@Id
private Long id;
diff --git a/src/main/java/fr/diginamic/tp_grasps/daos/IClientDao.java b/src/main/java/fr/diginamic/tp_grasps/daos/IClientDao.java
new file mode 100644
index 0000000..712f5b9
--- /dev/null
+++ b/src/main/java/fr/diginamic/tp_grasps/daos/IClientDao.java
@@ -0,0 +1,14 @@
+package fr.diginamic.tp_grasps.daos;
+
+import fr.diginamic.tp_grasps.beans.Client;
+
+public interface IClientDao {
+
+ /**
+ * @param id
+ * @return
+ *
+ * Méthode interface pour extraire le client
+ */
+ Client extraireClient(String id);
+}
diff --git a/src/main/java/fr/diginamic/tp_grasps/daos/ITypeReservationDao.java b/src/main/java/fr/diginamic/tp_grasps/daos/ITypeReservationDao.java
new file mode 100644
index 0000000..eb06d09
--- /dev/null
+++ b/src/main/java/fr/diginamic/tp_grasps/daos/ITypeReservationDao.java
@@ -0,0 +1,14 @@
+package fr.diginamic.tp_grasps.daos;
+
+import fr.diginamic.tp_grasps.beans.TypeReservation;
+
+public interface ITypeReservationDao {
+
+ /**
+ * @param type
+ * @return
+ *
+ * Méthode interface pour extraire le type de réservation
+ */
+ TypeReservation extraireTypeReservation(String type);
+}
diff --git a/src/main/java/fr/diginamic/tp_grasps/daos/ClientDao.java b/src/main/java/fr/diginamic/tp_grasps/daos/impl/ClientDao.java
similarity index 62%
rename from src/main/java/fr/diginamic/tp_grasps/daos/ClientDao.java
rename to src/main/java/fr/diginamic/tp_grasps/daos/impl/ClientDao.java
index 4e3690e..56a8abe 100644
--- a/src/main/java/fr/diginamic/tp_grasps/daos/ClientDao.java
+++ b/src/main/java/fr/diginamic/tp_grasps/daos/impl/ClientDao.java
@@ -1,16 +1,25 @@
-package fr.diginamic.tp_grasps.daos;
+package fr.diginamic.tp_grasps.daos.impl;
import java.util.List;
import java.util.Optional;
import fr.diginamic.tp_grasps.beans.Client;
+import fr.diginamic.tp_grasps.daos.IClientDao;
-public class ClientDao {
+public class ClientDao implements IClientDao {
private static Client[] clients = {new Client("1", true), new Client("2", true), new Client("3", false)};
-
+
+ /**
+ * @param id
+ * @return
+ *
+ * Méthode de la classe qui vient faire une extraction d'un client
+ */
+
+ @Override
public Client extraireClient(String id) {
-
+
Optional opt = List.of(clients).stream().filter(c->c.getIdentifiantClient().equals(id)).findAny();
if (opt.isPresent()) {
return opt.get();
diff --git a/src/main/java/fr/diginamic/tp_grasps/daos/TypeReservationDao.java b/src/main/java/fr/diginamic/tp_grasps/daos/impl/TypeReservationDao.java
similarity index 61%
rename from src/main/java/fr/diginamic/tp_grasps/daos/TypeReservationDao.java
rename to src/main/java/fr/diginamic/tp_grasps/daos/impl/TypeReservationDao.java
index 007038d..b0a330d 100644
--- a/src/main/java/fr/diginamic/tp_grasps/daos/TypeReservationDao.java
+++ b/src/main/java/fr/diginamic/tp_grasps/daos/impl/TypeReservationDao.java
@@ -1,14 +1,22 @@
-package fr.diginamic.tp_grasps.daos;
+package fr.diginamic.tp_grasps.daos.impl;
import java.util.List;
import java.util.Optional;
import fr.diginamic.tp_grasps.beans.TypeReservation;
+import fr.diginamic.tp_grasps.daos.ITypeReservationDao;
-public class TypeReservationDao {
+public class TypeReservationDao implements ITypeReservationDao {
private static TypeReservation[] types = {new TypeReservation("TH", 150.0, 15.0), new TypeReservation("CI", 10.9, 0.0)};
-
+
+ /**
+ * @param type
+ * @return
+ *
+ * Méthode de la classe qui vient faire une extraction du type de réservation
+ */
+ @Override
public TypeReservation extraireTypeReservation(String type) {
Optional opt = List.of(types).stream().filter(t->t.getType().equals(type)).findAny();
diff --git a/src/main/java/fr/diginamic/tp_grasps/factory/IReservationFactory.java b/src/main/java/fr/diginamic/tp_grasps/factory/IReservationFactory.java
new file mode 100644
index 0000000..efe5287
--- /dev/null
+++ b/src/main/java/fr/diginamic/tp_grasps/factory/IReservationFactory.java
@@ -0,0 +1,19 @@
+package fr.diginamic.tp_grasps.factory;
+
+import fr.diginamic.tp_grasps.beans.Client;
+import fr.diginamic.tp_grasps.beans.Reservation;
+
+import java.time.LocalDateTime;
+
+public interface IReservationFactory {
+
+ /**
+ * @param dateTime
+ * @param client
+ * @param nbPlaces
+ * @return
+ *
+ * Méthode interface pour créer une instance
+ */
+ Reservation getInstance(LocalDateTime dateTime, Client client, int nbPlaces);
+}
diff --git a/src/main/java/fr/diginamic/tp_grasps/factory/impl/ReservationFactory.java b/src/main/java/fr/diginamic/tp_grasps/factory/impl/ReservationFactory.java
new file mode 100644
index 0000000..e08a10c
--- /dev/null
+++ b/src/main/java/fr/diginamic/tp_grasps/factory/impl/ReservationFactory.java
@@ -0,0 +1,26 @@
+package fr.diginamic.tp_grasps.factory.impl;
+
+import fr.diginamic.tp_grasps.beans.Client;
+import fr.diginamic.tp_grasps.beans.Reservation;
+import fr.diginamic.tp_grasps.factory.IReservationFactory;
+
+import java.time.LocalDateTime;
+
+public class ReservationFactory implements IReservationFactory {
+
+ /**
+ * @param dateTime
+ * @param client
+ * @param nbPlaces
+ * @return
+ *
+ * Vient Créer une instance de la réservation
+ */
+ public Reservation getInstance(LocalDateTime dateTime, Client client, int nbPlaces) {
+ Reservation reservation = new Reservation(dateTime);
+ reservation.setNbPlaces(nbPlaces);
+ reservation.setClient(client);
+
+ return reservation;
+ }
+}
diff --git a/src/main/java/fr/diginamic/tp_grasps/services/IReservationService.java b/src/main/java/fr/diginamic/tp_grasps/services/IReservationService.java
new file mode 100644
index 0000000..b47211c
--- /dev/null
+++ b/src/main/java/fr/diginamic/tp_grasps/services/IReservationService.java
@@ -0,0 +1,18 @@
+package fr.diginamic.tp_grasps.services;
+
+import fr.diginamic.tp_grasps.beans.Client;
+import fr.diginamic.tp_grasps.beans.Reservation;
+import fr.diginamic.tp_grasps.beans.TypeReservation;
+
+public interface IReservationService {
+
+ /**
+ * @param client
+ * @param typeReservation
+ * @param reservation
+ * @return
+ *
+ * Méthode interface pour calculer le total de la réservation
+ */
+ double calculeMontantReservation (Client client, TypeReservation typeReservation, Reservation reservation);
+}
diff --git a/src/main/java/fr/diginamic/tp_grasps/services/impl/ReservationService.java b/src/main/java/fr/diginamic/tp_grasps/services/impl/ReservationService.java
new file mode 100644
index 0000000..512452c
--- /dev/null
+++ b/src/main/java/fr/diginamic/tp_grasps/services/impl/ReservationService.java
@@ -0,0 +1,27 @@
+package fr.diginamic.tp_grasps.services.impl;
+
+
+import fr.diginamic.tp_grasps.beans.Client;
+import fr.diginamic.tp_grasps.beans.Reservation;
+import fr.diginamic.tp_grasps.beans.TypeReservation;
+import fr.diginamic.tp_grasps.services.IReservationService;
+
+public class ReservationService implements IReservationService {
+
+ /**
+ * @param client
+ * @param typeReservation
+ * @param reservation
+ * @return
+ *
+ * Montant qui calcule le total de la réservation en fonction du type de Client
+ */
+ public double calculeMontantReservation (Client client, TypeReservation typeReservation, Reservation reservation) {
+ double total = typeReservation.getMontant() * reservation.getNbPlaces();
+ if (client.isPremium()) {
+ return total*(1-typeReservation.getReductionPourcent()/100.0);
+ } else {
+ return total;
+ }
+ }
+}
diff --git a/src/main/java/fr/diginamic/tp_grasps/utils/DateUtils.java b/src/main/java/fr/diginamic/tp_grasps/utils/DateUtils.java
new file mode 100644
index 0000000..5e42eaf
--- /dev/null
+++ b/src/main/java/fr/diginamic/tp_grasps/utils/DateUtils.java
@@ -0,0 +1,17 @@
+package fr.diginamic.tp_grasps.utils;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+public class DateUtils {
+
+ /**
+ * @param dateStr
+ * @return
+ *
+ * Permet de formater la date ex: 20/11/2020 19:55:55
+ */
+ public static LocalDateTime formatStringToDateTime(String dateStr) {
+ return LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"));
+ }
+}