From f57eb9e92453aef810c557de359f231b39ed5b20 Mon Sep 17 00:00:00 2001 From: Mireya Serrano Date: Tue, 26 May 2026 16:16:17 +0200 Subject: [PATCH] Product deleted --- .../sync_service/sync/ProductSyncService.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/ProductSyncService.java b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/ProductSyncService.java index 35e7a32..2fbcd8f 100644 --- a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/ProductSyncService.java +++ b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/ProductSyncService.java @@ -19,6 +19,8 @@ import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; /** * Pushes Dolibarr products to PrestaShop, creating or updating by SKU. @@ -57,6 +59,11 @@ public class ProductSyncService { List products = dolibarrClient.getProducts(); log.info("ProductSync: {} products to process", products.size()); + Set dolibarrSkus = products.stream() + .map(DolibarrProductDto::ref) + .filter(ref -> ref != null && !ref.isBlank()) + .collect(Collectors.toSet()); + for (DolibarrProductDto product : products) { if (product.ref() == null || product.ref().isBlank()) { log.warn("Skipping Dolibarr product id={} with no ref", product.id()); @@ -74,6 +81,23 @@ public class ProductSyncService { markError(product.ref(), e.getMessage()); } } + + for (ProductMapping mapping : productMappingRepository.findAll()) { + if (!dolibarrSkus.contains(mapping.getSku()) && mapping.getPrestashopId() != null) { + try { + prestashopClient.deleteProduct(mapping.getPrestashopId()); + productMappingRepository.delete(mapping); + processed++; + log.info("ProductSync: deleted PS product SKU={} psId={} (no longer in Dolibarr)", + mapping.getSku(), mapping.getPrestashopId()); + } catch (PrestashopApiException | RestClientException | HttpMessageConversionException e) { + failed++; + String msg = "Delete SKU %s: %s".formatted(mapping.getSku(), e.getMessage()); + errors.add(msg); + log.warn("ProductSync delete failed: {}", msg); + } + } + } } catch (RuntimeException e) { failed++; String msg = "Failed to fetch products from Dolibarr: " + e.getMessage();