From 5604fcd72b9cb3e07153829cabf4ee6f49c76396 Mon Sep 17 00:00:00 2001
From: Mathieu Vonlanthen <Mathieu.Vonlanthen@unige.ch>
Date: Mon, 17 Feb 2025 17:23:51 +0100
Subject: [PATCH 1/2] fix(DisseminationInfoPackageRepository): add missing left
 join (and add formatting)

---
 .../DisseminationInfoPackageRepository.java   | 29 +++++++++++++++----
 1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/DLCM-Access/src/main/java/ch/dlcm/repository/DisseminationInfoPackageRepository.java b/DLCM-Access/src/main/java/ch/dlcm/repository/DisseminationInfoPackageRepository.java
index 1ea45599aa..eeecf0016e 100644
--- a/DLCM-Access/src/main/java/ch/dlcm/repository/DisseminationInfoPackageRepository.java
+++ b/DLCM-Access/src/main/java/ch/dlcm/repository/DisseminationInfoPackageRepository.java
@@ -42,18 +42,37 @@ public interface DisseminationInfoPackageRepository extends SolidifyRepository<D
 
   List<DisseminationInfoPackage> findByInfoName(String name);
 
-  @Query("SELECT COALESCE(SUM(df.fileSize), 0) FROM DipDataFile df WHERE df.infoPackage.resId = :dipId")
+  @Query("SELECT COALESCE(SUM(df.fileSize), 0) "
+          + "FROM DipDataFile df "
+          + "WHERE df.infoPackage.resId = :dipId")
   long getSize(String dipId);
 
-  @Query("SELECT COUNT(DISTINCT d.resId) FROM DisseminationInfoPackage d JOIN d.orders o WHERE o.queryType = 'SIMPLE' AND o.status = 'READY'")
+  @Query("SELECT COUNT(DISTINCT d.resId) "
+          + "FROM DisseminationInfoPackage d "
+          + "JOIN d.orders o "
+          + "WHERE o.queryType = 'SIMPLE' "
+          + "AND o.status = 'READY'")
   int countDIPOfCompletedOrders();
 
-  @Query("SELECT dip FROM DisseminationInfoPackage dip JOIN dip.aips aip WHERE aip.resId = :aipId")
+  @Query("SELECT dip "
+          + "FROM DisseminationInfoPackage dip "
+          + "JOIN dip.aips aip "
+          + "WHERE aip.resId = :aipId")
   Page<DisseminationInfoPackage> findDipContainingAip(String aipId, Pageable pageable);
 
-  @Query("SELECT dip FROM DisseminationInfoPackage dip JOIN dip.orders order WHERE order.resId = :orderId")
+  @Query("SELECT dip "
+          + "FROM DisseminationInfoPackage dip "
+          + "JOIN dip.orders order "
+          + "WHERE order.resId = :orderId")
   List<DisseminationInfoPackage> findByOrderId(String orderId);
 
-  @Query("SELECT dip FROM DisseminationInfoPackage dip JOIN dip.orders order JOIN dip.aips aip JOIN order.subsetItems si WHERE aip.resId = :aipId AND order.disseminationPolicyId = :disseminationPolicyId and si IS NULL")
+  @Query("SELECT dip "
+          + "FROM DisseminationInfoPackage dip "
+          + "JOIN dip.orders order "
+          + "JOIN dip.aips aip "
+          + "LEFT JOIN order.subsetItems si "
+          + "WHERE aip.resId = :aipId "
+          + "AND order.disseminationPolicyId = :disseminationPolicyId "
+          + "AND si IS NULL")
   List<DisseminationInfoPackage> findByFullDisseminationPolicyIdAndAipId(String disseminationPolicyId, String aipId);
 }
-- 
GitLab


From 9668fba8b3388d57338d698749763ec28908601f Mon Sep 17 00:00:00 2001
From: Mathieu Vonlanthen <Mathieu.Vonlanthen@unige.ch>
Date: Tue, 18 Feb 2025 11:31:31 +0100
Subject: [PATCH 2/2] fix(SearchController#prepareDownload): return an orderId
 when archive already prepared

---
 .../ch/dlcm/controller/access/SearchController.java    | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/DLCM-Access/src/main/java/ch/dlcm/controller/access/SearchController.java b/DLCM-Access/src/main/java/ch/dlcm/controller/access/SearchController.java
index b6f2e33460..f1a8ba0e72 100644
--- a/DLCM-Access/src/main/java/ch/dlcm/controller/access/SearchController.java
+++ b/DLCM-Access/src/main/java/ch/dlcm/controller/access/SearchController.java
@@ -270,13 +270,17 @@ public abstract class SearchController extends AccessIndexResourceReadOnlyContro
       /*
        * DIP already exists
        */
-      return new ResponseEntity<>("DIP already exists", HttpStatus.BAD_REQUEST);
+      final DisseminationInfoPackage dip = dipList.get(0);
+      if (dip.getOrders().size() != 1) {
+        return new ResponseEntity<>("Exactly one order should be associated to the DIP " + dip.getResId(), HttpStatus.INTERNAL_SERVER_ERROR);
+      }
+      return new ResponseEntity<>(dip.getOrders().get(0).getResId(), HttpStatus.ACCEPTED);
     }
   }
 
   @Override
   public HttpEntity<RestCollection<ArchiveMetadata>> search(@RequestParam(required = false) String query, Pageable pageable) {
-    // transform sort parameters from the portail to the corresponding name in the index
+    // transform sort parameters from the portal to the corresponding name in the index
     if (!pageable.getSort().isEmpty() && pageable.getSort().isSorted()) {
       pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), this.adaptSortProperties(pageable.getSort()));
     }
@@ -288,7 +292,7 @@ public abstract class SearchController extends AccessIndexResourceReadOnlyContro
   public HttpEntity<RestCollection<ArchiveMetadata>> searchPost(
           @RequestBody(required = false) List<SearchCondition> searchConditions,
           Pageable pageable) {
-    // transform sort parameters from the portail to the corresponding name in the index
+    // transform sort parameters from the portal to the corresponding name in the index
     if (!pageable.getSort().isEmpty() && pageable.getSort().isSorted()) {
       pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), this.adaptSortProperties(pageable.getSort()));
     }
-- 
GitLab