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")); + } +}