From bf4eb6eb5f55a386b8aa2cc46706fd785a4c8bc2 Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Wed, 16 Nov 2022 11:06:26 +0100
Subject: [PATCH] Added crud to collections controller

---
 .../oats/vospace/CollectionsController.java   | 47 +++++++++++++------
 .../inaf/oats/vospace/CollectionsService.java | 21 +++++++++
 .../oats/vospace/DeleteNodeController.java    |  1 -
 .../vospace/persistence/CollectionsDAO.java   |  2 +-
 4 files changed, 55 insertions(+), 16 deletions(-)

diff --git a/src/main/java/it/inaf/oats/vospace/CollectionsController.java b/src/main/java/it/inaf/oats/vospace/CollectionsController.java
index 4e08fd0..b8710df 100644
--- a/src/main/java/it/inaf/oats/vospace/CollectionsController.java
+++ b/src/main/java/it/inaf/oats/vospace/CollectionsController.java
@@ -13,42 +13,61 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 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.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
  *
  * @author Nicola Fulvio Calabria <nicola.calabria at inaf.it>
  */
-
 @RestController
 public class CollectionsController {
-    
+
     private static final Logger LOG = LoggerFactory.getLogger(CollectionsController.class);
-    
+
     @Autowired
     private CollectionsService collectionsService;
-        
+
     // list collections owned by user
     @GetMapping(value = "/collections")
     public ResponseEntity<NodeCollectionsList> listCollections(
             HttpServletRequest request, User principal) {
-        LOG.debug("listCollections called for user {}", principal.getName());
-        
+        LOG.debug("list collections called for user {}", principal.getName());
+
         NodeCollectionsList ncl = new NodeCollectionsList();
-                
+
         ncl.setNodeCollections(
-                collectionsService.listCollections(principal.getName()));       
+                collectionsService.listCollections(principal.getName()));
 
         return ResponseEntity.ok(ncl);
     }
-        
-    
+
     // create a new collection with specified title
-    
-    
+    @PutMapping(value = "/collections")
+    public ResponseEntity<String> createCollection(
+            @RequestBody String collectionName, User principal) {
+        LOG.debug("create collection called with name {} called for user {}", 
+                collectionName, principal.getName());       
+
+        collectionsService.createNewCollection(collectionName, principal.getName());
+
+        return ResponseEntity.ok("Collection created");
+    }
+
     // delete collection by id
-    
-    
+    @DeleteMapping(value = "/collections")
+    public ResponseEntity<String> deleteCollection(
+            @RequestBody Long collectionId, User principal) {
+        LOG.debug("delete collection called with id {} for user {}", 
+                collectionId, principal.getName());
+        
+        collectionsService.deleteCollectionById(collectionId, principal.getName());
+        
+        return ResponseEntity.ok("Collection deleted");
+                
+    }
     
 }
diff --git a/src/main/java/it/inaf/oats/vospace/CollectionsService.java b/src/main/java/it/inaf/oats/vospace/CollectionsService.java
index c7d8218..79e8905 100644
--- a/src/main/java/it/inaf/oats/vospace/CollectionsService.java
+++ b/src/main/java/it/inaf/oats/vospace/CollectionsService.java
@@ -7,6 +7,7 @@ package it.inaf.oats.vospace;
 
 import it.inaf.oats.vospace.persistence.CollectionsDAO;
 import it.inaf.oats.vospace.datamodel.collections.NodeCollection;
+import it.inaf.oats.vospace.exception.PermissionDeniedException;
 import java.util.ArrayList;
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,12 +33,32 @@ public class CollectionsService {
         if (isUserAuthenticated(userId)) {
             result.addAll(
                     collectionsDAO.getUserNodeCollections(userId));
+        } else {
+            throw new PermissionDeniedException("Authentication required");
         }
 
         return result;
 
     }
 
+    public void createNewCollection(String collectionTitle, String userId) {
+        if (isUserAuthenticated(userId)) {
+            collectionsDAO.createNewCollection(collectionTitle, userId);
+        } else {
+            throw new PermissionDeniedException("Authentication required");
+        }
+    }
+
+    public void deleteCollectionById(Long collectionId, String userId) {
+        if(isUserAuthenticated(userId))
+        {
+            // TODO: Implement delete
+            throw new UnsupportedOperationException("delete collection");
+        } else {
+            throw new PermissionDeniedException("Authentication required");
+        }
+    }
+   
     private boolean isUserAuthenticated(String userId) {
         return userId != null
                 && !userId.equals("anonymous");
diff --git a/src/main/java/it/inaf/oats/vospace/DeleteNodeController.java b/src/main/java/it/inaf/oats/vospace/DeleteNodeController.java
index b714c94..09cd994 100644
--- a/src/main/java/it/inaf/oats/vospace/DeleteNodeController.java
+++ b/src/main/java/it/inaf/oats/vospace/DeleteNodeController.java
@@ -10,7 +10,6 @@ import javax.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.DeleteMapping;
diff --git a/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
index c97d438..d520bfc 100644
--- a/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
+++ b/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
@@ -30,7 +30,7 @@ public class CollectionsDAO {
         jdbcTemplate = new JdbcTemplate(dataSource);
     }
 
-    void createNewCollection(String title, String ownerId) {
+    public void createNewCollection(String title, String ownerId) {
 
         String sql = "INSERT INTO collections (title, owner_id) VALUES (?,?)";
 
-- 
GitLab