From f8c3616a9bafad1e11667712680f698a1c10480c Mon Sep 17 00:00:00 2001
From: salaheddineZidani <salaheddine.zidani@marketingconfort.com>
Date: Sat, 23 Nov 2024 18:16:39 +0100
Subject: [PATCH] save changes

---
 pom.xml                                       |  2 +-
 .../services/ExternalApiService.java          |  1 +
 .../services/impl/CartServiceImp.java         | 18 +++++++-----
 .../services/impl/ExternalApiServiceImpl.java | 29 +++++++++++++++----
 .../services/impl/ItemCartServiceImp.java     |  2 +-
 .../impl/PromoCodeUtilServiceImpl.java        |  9 ++++--
 6 files changed, 44 insertions(+), 17 deletions(-)

diff --git a/pom.xml b/pom.xml
index 20e7878..0a69ec0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
 		<dependency>
 			<groupId>com.marketingconfort</groupId>
 			<artifactId>mydressin-common</artifactId>
-			<version>1.0.137-SNAPSHOT-5</version>
+			<version>1.0.137-SNAPSHOT-7</version>
 		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
diff --git a/src/main/java/com/marketingconfort/mydressin/services/ExternalApiService.java b/src/main/java/com/marketingconfort/mydressin/services/ExternalApiService.java
index cdc7f45..8faa6b2 100644
--- a/src/main/java/com/marketingconfort/mydressin/services/ExternalApiService.java
+++ b/src/main/java/com/marketingconfort/mydressin/services/ExternalApiService.java
@@ -8,6 +8,7 @@ import java.util.List;
 
 public interface ExternalApiService {
     PromoCodeDTO getPromoCode(String code);
+    PromoCodeDTO getPromoCodeById(Long promoCodeId);
     List<PromoCodeDTO> getPromoCodesByIds(List<Long> ids);
     List<ProductCategoriesResponse> getProductsAndVariationsWithCategories(List<Long> productIds, List<Long> variationIds);
     void updateUsagePromoCode(boolean incrementUsage, Long promoCodeId);
diff --git a/src/main/java/com/marketingconfort/mydressin/services/impl/CartServiceImp.java b/src/main/java/com/marketingconfort/mydressin/services/impl/CartServiceImp.java
index 65eb030..6ad60d9 100644
--- a/src/main/java/com/marketingconfort/mydressin/services/impl/CartServiceImp.java
+++ b/src/main/java/com/marketingconfort/mydressin/services/impl/CartServiceImp.java
@@ -265,7 +265,6 @@ public class CartServiceImp implements CartService {
         if (cart.getAppliedVoucherCode() != null && cart.getAppliedVoucher() == null) {
             fetchAndSetAppliedVoucher(cart);
         }
-        reload(cart);
 
         Optional<CartCountConfigDTO> configOptional = cartCountConfigService.findFirstConfig();
         CartCountConfigDTO config = configOptional.orElse(null);
@@ -274,7 +273,9 @@ public class CartServiceImp implements CartService {
 
         cartRepository.save(cart);
 
-        CartDTO cartDTO = cartMapper.toDTO(cart);
+        Cart updatedCart = findCartClient(clientId);
+
+        CartDTO cartDTO = reload(updatedCart);
 
         applyCountdownToCartDTO(cartDTO, config);
 
@@ -811,7 +812,9 @@ public class CartServiceImp implements CartService {
 
     @Override
     public CartDTO removeCodePromoFromCart(Long clientId, Long promoCodeIdToRemove) {
-        Cart cart = findOrCreateCartByClientId(clientId);
+        Cart cart = cartRepository.findCartWithValidItems(clientId, Status.open, ItemCartStatus.DELETED_SITE, ItemCartStatus.DELETED_BO)
+                .orElseThrow(() -> new CartNotFoundException("Panier non trouvé pour le client ID: " + clientId));
+
         if (cart == null) {
             throw new IllegalArgumentException("Le panier pour ce client n'existe pas.");
         }
@@ -824,11 +827,13 @@ public class CartServiceImp implements CartService {
             throw new IllegalArgumentException("Le code promo spécifié n'est pas appliqué au panier.");
         }
 
-        cart.getPromoCodeIds().remove(promoCodeIdToRemove);
+        cart.getPromoCodeIds().removeIf(id -> id.equals(promoCodeIdToRemove));
         cartRepository.save(cart);
 
         CartDTO cartDTO = getCartByClientId(clientId);
-        cartDTO.getInfos().add("Code Promo supprimé avec succès.");
+
+        PromoCodeDTO promoCodeDTO = externalApiService.getPromoCodeById(promoCodeIdToRemove);
+        cartDTO.getInfos().add("Le code promo: " + promoCodeDTO.getCode() + " est supprimé avec succès.");
 
         return cartDTO;
     }
@@ -846,9 +851,6 @@ public class CartServiceImp implements CartService {
 
                 if (!isCartValid) {
                     cart.getPromoCodeIds().remove(promoCode.getId());
-                    reload(cart);
-                    cartRepository.save(cart);
-                    cart.getInfos().add("Le code promo " + promoCode.getCode() + " a été retiré car aucun produit éligible n'est présent dans le panier.");
                 }
             }
         }
diff --git a/src/main/java/com/marketingconfort/mydressin/services/impl/ExternalApiServiceImpl.java b/src/main/java/com/marketingconfort/mydressin/services/impl/ExternalApiServiceImpl.java
index 3defad3..7506fbf 100644
--- a/src/main/java/com/marketingconfort/mydressin/services/impl/ExternalApiServiceImpl.java
+++ b/src/main/java/com/marketingconfort/mydressin/services/impl/ExternalApiServiceImpl.java
@@ -38,19 +38,38 @@ public class ExternalApiServiceImpl implements ExternalApiService {
 
     @Override
     public PromoCodeDTO getPromoCode(String code) {
-        String url = nameUrl.getAddonsService()+ NameUri.ADDONS + AddonsServicePath.getPromoCodeUrl(code);
+        String url = nameUrl.getAddonsService()+ NameUri.ADDONS + AddonsServicePath.getPromoCodeByCodeUrl(code);
         try {
-            logger.info("Envoi de la requête pour récupérer le code promo: {}", code);
+            logger.info("Envoi de la requête pour récupérer le code promo avec code: {}", code);
             ResponseEntity<PromoCodeDTO> response = mcRestTemplateService.getForObject(url, PromoCodeDTO.class);
             if (response.getStatusCode() == HttpStatus.OK) {
                 logger.info("Code promo récupéré avec succès: {}", response.getBody());
                 return response.getBody();
             } else {
-                logger.warn("Erreur lors de la récupération du code promo : {}", response.getStatusCode());
-                throw new RuntimeException("Erreur lors de la récupération du code promo : " + response.getStatusCode());
+                logger.warn("Erreur lors de la récupération du code promo avec code : {}", response.getStatusCode());
+                throw new RuntimeException("Erreur lors de la récupération du code promo avec code : " + response.getStatusCode());
             }
         } catch (RestClientException e) {
-            logger.error("Erreur de communication avec le microservice pour le code promo '{}': {}", code, e.getMessage(), e);
+            logger.error("Erreur de communication avec le microservice pour le code promo avec code '{}': {}", code, e.getMessage(), e);
+            throw new RuntimeException("Erreur de communication avec le microservice", e);
+        }
+    }
+
+    @Override
+    public PromoCodeDTO getPromoCodeById(Long promoCodeId) {
+        String url = nameUrl.getAddonsService()+ NameUri.ADDONS + AddonsServicePath.getPromoCodeByIdUrl(promoCodeId);
+        try {
+            logger.info("Envoi de la requête pour récupérer le code promo ID: {}", promoCodeId);
+            ResponseEntity<PromoCodeDTO> response = mcRestTemplateService.getForObject(url, PromoCodeDTO.class);
+            if (response.getStatusCode() == HttpStatus.OK) {
+                logger.info("Code promo récupéré avec succès: {}", response.getBody());
+                return response.getBody();
+            } else {
+                logger.warn("Erreur lors de la récupération du code promo ID : {}", response.getStatusCode());
+                throw new RuntimeException("Erreur lors de la récupération du code promo ID : " + response.getStatusCode());
+            }
+        } catch (RestClientException e) {
+            logger.error("Erreur de communication avec le microservice pour le code promo ID '{}': {}", promoCodeId, e.getMessage(), e);
             throw new RuntimeException("Erreur de communication avec le microservice", e);
         }
     }
diff --git a/src/main/java/com/marketingconfort/mydressin/services/impl/ItemCartServiceImp.java b/src/main/java/com/marketingconfort/mydressin/services/impl/ItemCartServiceImp.java
index 29dac02..5696f0a 100644
--- a/src/main/java/com/marketingconfort/mydressin/services/impl/ItemCartServiceImp.java
+++ b/src/main/java/com/marketingconfort/mydressin/services/impl/ItemCartServiceImp.java
@@ -365,7 +365,7 @@ public class ItemCartServiceImp implements ItemCartService {
         deleteItemCartById(cart, itemCartId);
         cartService.removeInvalidPromoCodes(cart);
         cartRepository.save(cart);
-        return cartMapper.toDTO(cart);
+        return cartService.getCartByClientId(clientId);
     }
 
 
diff --git a/src/main/java/com/marketingconfort/mydressin/services/impl/PromoCodeUtilServiceImpl.java b/src/main/java/com/marketingconfort/mydressin/services/impl/PromoCodeUtilServiceImpl.java
index 58176ba..6a2a59f 100644
--- a/src/main/java/com/marketingconfort/mydressin/services/impl/PromoCodeUtilServiceImpl.java
+++ b/src/main/java/com/marketingconfort/mydressin/services/impl/PromoCodeUtilServiceImpl.java
@@ -28,8 +28,13 @@ public class PromoCodeUtilServiceImpl implements PromoCodeUtilService {
 
     @Override
     public CartDTO calculatePromoCodeDiscountsToCart(CartDTO cart) {
-        if (cart == null || cart.getPromoCodeIds() == null || cart.getPromoCodeIds().isEmpty()) {
-            logger.warn("Cart is null or no promo codes provided.");
+        if (cart == null) {
+            logger.warn("Cart is null.");
+            return cart;
+        }
+
+        if (cart.getPromoCodeIds() == null || cart.getPromoCodeIds().isEmpty()) {
+            logger.warn("No promo codes provided in the cart with client ID: {}.", cart.getClientId());
             return cart;
         }
 
-- 
GitLab