From 71ba624a11ca0bf8a0a0745333e0bf08d0b26c19 Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Thu, 23 Mar 2023 21:56:18 +0100
Subject: [PATCH] added delete collection

---
 .../ia2/vospace/ui/client/VOSpaceClient.java    |  2 +-
 .../controller/NodeCollectionsController.java   | 17 +++++++++++++++++
 vospace-ui-frontend/src/api/server/index.js     |  2 +-
 .../src/components/Collections.vue              | 10 ++++++++--
 4 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
index fd0b92c..20d2b6d 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java
@@ -160,7 +160,7 @@ public class VOSpaceClient {
 
     public void deleteCollection(Long id, Optional<String> token) {
 
-        HttpRequest request = getRequest("/collections?id="+id, token)
+        HttpRequest request = getRequest("/collections/"+id, token)
                 .header("Accept", useJson ? "application/json" : "text/xml")
                 .header("Content-Type", useJson ? "application/json" : "text/xml")
                 .DELETE()
diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java
index a4773f2..3277dc6 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodeCollectionsController.java
@@ -17,7 +17,9 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
@@ -61,4 +63,19 @@ public class NodeCollectionsController extends BaseController {
         return ResponseEntity.noContent().build();
     }
     
+    @DeleteMapping(value = "/collections/{collectionId}", produces = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity<?> deleteNodeCollection(User principal, 
+            @PathVariable Long collectionId) 
+            throws Exception
+    {                
+        
+        LOG.debug("delete collection {} for user {}", 
+                collectionId, principal.getName());
+
+        // Call creation logic        
+        client.deleteCollection(collectionId, tokenProvider.getToken());
+                
+        return ResponseEntity.noContent().build();
+    }
+    
 }
diff --git a/vospace-ui-frontend/src/api/server/index.js b/vospace-ui-frontend/src/api/server/index.js
index c75aa26..7dde1a2 100644
--- a/vospace-ui-frontend/src/api/server/index.js
+++ b/vospace-ui-frontend/src/api/server/index.js
@@ -128,7 +128,7 @@ export default {
     });
   },
   deleteCollection(collectionId) {
-    let url = BASE_API_URL + 'collections?id='+collectionId;
+    let url = BASE_API_URL + 'collections/'+collectionId;
     return apiRequest({
       method: 'DELETE',
       url: url,
diff --git a/vospace-ui-frontend/src/components/Collections.vue b/vospace-ui-frontend/src/components/Collections.vue
index c946e92..a6a07de 100644
--- a/vospace-ui-frontend/src/components/Collections.vue
+++ b/vospace-ui-frontend/src/components/Collections.vue
@@ -13,16 +13,17 @@
   <div v-if="collections.length > 0" class="mb-3">
     <table class="table b-table table-striped table-hover">
       <thead>
+        <tr>
           <th>Id</th>
           <th>Title</th>
-          <th></th>
+          <th>Actions</th>
         </tr>
       </thead>
       <tbody>
         <tr v-for="collection in collections" :key="collection.id">
           <td>{{collection.id}}</td>
           <td>{{collection.title}}</td>
-          <td></td>
+          <td><b-icon-trash color="red" @click="deleteCollection(collection.id)"/></td>
         </tr>
       </tbody>
     </table>
@@ -41,11 +42,13 @@
 </template>
 
 <script>
+import { BIconTrash } from 'bootstrap-vue'
 import FAQModal from './modal/FAQModal.vue'
 import CreateCollectionModal from './modal/CreateCollectionModal.vue'
 
 export default {
   components: {
+    BIconTrash,
     FAQModal,
     CreateCollectionModal
   },
@@ -60,6 +63,9 @@ export default {
   methods: {
     loadCollections() {
       this.$store.dispatch('loadCollections');
+    },
+    deleteCollection(id) {
+        this.$store.dispatch('deleteCollection', id);
     }
   }
 }
-- 
GitLab