From 800f9f419595a025072266bac737d74ae05d053e Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Tue, 15 Nov 2022 20:15:43 +0100
Subject: [PATCH] Refactor + add wrapper class for collections controller

---
 .../oats/vospace/CollectionsController.java   | 54 +++++++++++++++++++
 .../inaf/oats/vospace/CollectionsService.java | 46 ++++++++++++++++
 .../vospace/persistence/CollectionsDAO.java   |  2 +-
 .../persistence/model/NodeCollection.java     | 49 -----------------
 .../persistence/CollectionsDAOTest.java       |  2 +-
 5 files changed, 102 insertions(+), 51 deletions(-)
 create mode 100644 src/main/java/it/inaf/oats/vospace/CollectionsController.java
 create mode 100644 src/main/java/it/inaf/oats/vospace/CollectionsService.java
 delete mode 100644 src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java

diff --git a/src/main/java/it/inaf/oats/vospace/CollectionsController.java b/src/main/java/it/inaf/oats/vospace/CollectionsController.java
new file mode 100644
index 0000000..4e08fd0
--- /dev/null
+++ b/src/main/java/it/inaf/oats/vospace/CollectionsController.java
@@ -0,0 +1,54 @@
+/*
+ * This file is part of vospace-rest
+ * Copyright (C) 2021 Istituto Nazionale di Astrofisica
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+package it.inaf.oats.vospace;
+
+import it.inaf.ia2.aa.data.User;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollectionsList;
+import it.inaf.oats.vospace.persistence.CollectionsDAO;
+import javax.servlet.http.HttpServletRequest;
+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.GetMapping;
+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());
+        
+        NodeCollectionsList ncl = new NodeCollectionsList();
+                
+        ncl.setNodeCollections(
+                collectionsService.listCollections(principal.getName()));       
+
+        return ResponseEntity.ok(ncl);
+    }
+        
+    
+    // create a new collection with specified title
+    
+    
+    // delete collection by id
+    
+    
+    
+}
diff --git a/src/main/java/it/inaf/oats/vospace/CollectionsService.java b/src/main/java/it/inaf/oats/vospace/CollectionsService.java
new file mode 100644
index 0000000..c7d8218
--- /dev/null
+++ b/src/main/java/it/inaf/oats/vospace/CollectionsService.java
@@ -0,0 +1,46 @@
+/*
+ * This file is part of vospace-rest
+ * Copyright (C) 2021 Istituto Nazionale di Astrofisica
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+package it.inaf.oats.vospace;
+
+import it.inaf.oats.vospace.persistence.CollectionsDAO;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollection;
+import java.util.ArrayList;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ *
+ * @author Nicola Fulvio Calabria <nicola.calabria at inaf.it>
+ */
+@Service
+@EnableTransactionManagement
+public class CollectionsService {
+
+    @Autowired
+    private CollectionsDAO collectionsDAO;
+
+    public List<NodeCollection> listCollections(String userId) {
+
+        List<NodeCollection> result = new ArrayList<>();
+
+        // If user is not authenticated simply return an empty list
+        if (isUserAuthenticated(userId)) {
+            result.addAll(
+                    collectionsDAO.getUserNodeCollections(userId));
+        }
+
+        return result;
+
+    }
+
+    private boolean isUserAuthenticated(String userId) {
+        return userId != null
+                && !userId.equals("anonymous");
+    }
+
+}
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 fecca5c..c97d438 100644
--- a/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
+++ b/src/main/java/it/inaf/oats/vospace/persistence/CollectionsDAO.java
@@ -5,7 +5,7 @@
  */
 package it.inaf.oats.vospace.persistence;
 
-import it.inaf.oats.vospace.persistence.model.NodeCollection;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
diff --git a/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java b/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java
deleted file mode 100644
index e904820..0000000
--- a/src/main/java/it/inaf/oats/vospace/persistence/model/NodeCollection.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * This file is part of vospace-rest
- * Copyright (C) 2021 Istituto Nazionale di Astrofisica
- * SPDX-License-Identifier: GPL-3.0-or-later
- */
-package it.inaf.oats.vospace.persistence.model;
-
-/**
- *
- * @author Nicola Fulvio Calabria <nicola.calabria at inaf.it>
- */
-public class NodeCollection {
-    
-    private Long id;
-    private String title;
-    private String ownerId;
-        
-    public NodeCollection(Long id, String title, String ownerId) {
-        this.id = id;
-        this.title = title;
-        this.ownerId = ownerId;
-    }    
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getOwnerId() {
-        return ownerId;
-    }
-
-    public void setOwnerId(String ownerId) {
-        this.ownerId = ownerId;
-    }    
-    
-    
-}
diff --git a/src/test/java/it/inaf/oats/vospace/persistence/CollectionsDAOTest.java b/src/test/java/it/inaf/oats/vospace/persistence/CollectionsDAOTest.java
index a7871d6..5b2d527 100644
--- a/src/test/java/it/inaf/oats/vospace/persistence/CollectionsDAOTest.java
+++ b/src/test/java/it/inaf/oats/vospace/persistence/CollectionsDAOTest.java
@@ -5,7 +5,7 @@
  */
 package it.inaf.oats.vospace.persistence;
 
-import it.inaf.oats.vospace.persistence.model.NodeCollection;
+import it.inaf.oats.vospace.datamodel.collections.NodeCollection;
 import java.util.List;
 import javax.sql.DataSource;
 import static org.junit.jupiter.api.Assertions.assertEquals;
-- 
GitLab