From d71145fd576394687d336e54d7c4b1497ef93880 Mon Sep 17 00:00:00 2001
From: Mathilde Lorrain <mlorrain@takima.fr>
Date: Mon, 26 Feb 2024 18:03:49 +0100
Subject: [PATCH] feat: add custom exception

---
 .../takima/agencymanagement/dao/TravelDao.java |  3 +--
 .../takima/agencymanagement/dao/UserDao.java   |  3 +--
 .../AlreadyTravelSubscribedException.java      |  7 +++++++
 .../takima/agencymanagement/model/Travel.java  |  4 ++++
 .../service/TravelService.java                 | 18 ++++++++++--------
 .../agencymanagement/service/UserService.java  |  6 +++---
 6 files changed, 26 insertions(+), 15 deletions(-)
 create mode 100644 src/io/takima/agencymanagement/exception/AlreadyTravelSubscribedException.java

diff --git a/src/io/takima/agencymanagement/dao/TravelDao.java b/src/io/takima/agencymanagement/dao/TravelDao.java
index 5937d37..20e79db 100644
--- a/src/io/takima/agencymanagement/dao/TravelDao.java
+++ b/src/io/takima/agencymanagement/dao/TravelDao.java
@@ -16,9 +16,8 @@ public class TravelDao {
         addTravelsToMap();
     }
 
-    public Travel persist(Travel travel) {
+    public void save(Travel travel) {
         travels.put(travel.getId(), travel);
-        return travel;
     }
 
     public Travel update(Travel travel) {
diff --git a/src/io/takima/agencymanagement/dao/UserDao.java b/src/io/takima/agencymanagement/dao/UserDao.java
index 689edb6..cec2f8e 100644
--- a/src/io/takima/agencymanagement/dao/UserDao.java
+++ b/src/io/takima/agencymanagement/dao/UserDao.java
@@ -13,9 +13,8 @@ public class UserDao {
 
     private final Map<Long, User> users = Collections.synchronizedMap(new HashMap<>());
 
-    public User persist(User user) {
+    public void save(User user) {
         users.put(user.getId(), user);
-        return user;
     }
 
     public User update(User user) {
diff --git a/src/io/takima/agencymanagement/exception/AlreadyTravelSubscribedException.java b/src/io/takima/agencymanagement/exception/AlreadyTravelSubscribedException.java
new file mode 100644
index 0000000..11ed7a3
--- /dev/null
+++ b/src/io/takima/agencymanagement/exception/AlreadyTravelSubscribedException.java
@@ -0,0 +1,7 @@
+package io.takima.agencymanagement.exception;
+
+public class AlreadyTravelSubscribedException extends Exception {
+    public AlreadyTravelSubscribedException(String message) {
+        super(message);
+    }
+}
\ No newline at end of file
diff --git a/src/io/takima/agencymanagement/model/Travel.java b/src/io/takima/agencymanagement/model/Travel.java
index e82d3cf..7c2e4ba 100644
--- a/src/io/takima/agencymanagement/model/Travel.java
+++ b/src/io/takima/agencymanagement/model/Travel.java
@@ -110,4 +110,8 @@ public class Travel {
 
         return stringBuilder.toString();
     }
+
+    public boolean hasAvailableCapacity(Set<User> participants, int capacity) {
+        return participants.size() < capacity;
+    }
 }
diff --git a/src/io/takima/agencymanagement/service/TravelService.java b/src/io/takima/agencymanagement/service/TravelService.java
index 37969c2..c5976d4 100644
--- a/src/io/takima/agencymanagement/service/TravelService.java
+++ b/src/io/takima/agencymanagement/service/TravelService.java
@@ -1,6 +1,7 @@
 package io.takima.agencymanagement.service;
 
 import io.takima.agencymanagement.dao.TravelDao;
+import io.takima.agencymanagement.exception.AlreadyTravelSubscribedException;
 import io.takima.agencymanagement.mapper.TravelDtoMapper;
 import io.takima.agencymanagement.model.Travel;
 import io.takima.agencymanagement.model.User;
@@ -24,17 +25,17 @@ public class TravelService {
     }
 
     public TravelResponseDto create(Travel travel) {
-        travelDao.persist(travel);
+        travelDao.save(travel);
         return fromTravel(travel);
     }
 
     public TravelResponseDto update(Travel travel) {
-        travelDao.persist(travel);
+        travelDao.save(travel);
         return fromTravel(travel);
     }
 
     public TravelResponseDto delete(Travel travel) {
-        travelDao.persist(travel);
+        travelDao.save(travel);
         return fromTravel(travel);
     }
 
@@ -49,6 +50,7 @@ public class TravelService {
                 .toList();
 
     }
+
     public void applyDiscounts(Travel travel) {
         if (travel.getDiscounts().isEmpty()) {
             System.out.println("Aucune réduction n'est applicable sur ce voyage !");
@@ -61,19 +63,18 @@ public class TravelService {
         }
     }
 
-    public boolean subscribe(User user, Travel travel) throws Exception {
+    public void subscribe(User user, Travel travel) throws Exception {
 
         if (travel.getParticipants().contains(user) || travel.getWaitList().contains(user)) {
             //User already subscribed or in waitList
-            throw new Exception("L'utilisateur est déjà inscrit ou en file d'attente pour ce voyage.");
+            throw new AlreadyTravelSubscribedException("L'utilisateur est déjà inscrit ou en file d'attente pour ce voyage.");
         }
 
         if (travel.getParticipants().size() < travel.getCapacity()) {
             travel.getParticipants().add(user);
-            return true;
+            return;
         }
         travel.getWaitList().add(user);
-        return false;
     }
 
     public void unsubscribe(User user, Travel travel) {
@@ -106,10 +107,11 @@ public class TravelService {
         List<Travel> travels = travelDao.findAll();
 
         return travels.stream()
-                .filter(travel -> travel.getCapacity() > travel.getParticipants().size() && travel.getDestination().equals(destination))
+                .filter(travel -> travel.hasAvailableCapacity(travel.getParticipants(), travel.getCapacity()) && travel.getDestination().equals(destination))
                 .toList();
     }
 
+
     public List<Travel> findInPriceRange(double minPrice, double maxPrice) {
         List<Travel> travels = travelDao.findAll();
 
diff --git a/src/io/takima/agencymanagement/service/UserService.java b/src/io/takima/agencymanagement/service/UserService.java
index 08903f6..458e0e5 100644
--- a/src/io/takima/agencymanagement/service/UserService.java
+++ b/src/io/takima/agencymanagement/service/UserService.java
@@ -14,17 +14,17 @@ public class UserService {
     UserDao userDao = new UserDao();
 
     public UserResponseDto create(User user) {
-        userDao.persist(user);
+        userDao.save(user);
         return fromUser(user);
     }
 
     public UserResponseDto update(User  user) {
-        userDao.persist(user);
+        userDao.save(user);
         return fromUser(user);
     }
 
     public UserResponseDto delete(User  user) {
-        userDao.persist(user);
+        userDao.save(user);
         return fromUser(user);
     }
 
-- 
GitLab