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