From 22df0d963e09520339dfa9c681caeaaec790df8e Mon Sep 17 00:00:00 2001 From: Gunther6070 Date: Wed, 2 Apr 2025 13:33:34 -0400 Subject: Added check to checkout to stop checking out decimal values for physical needs --- .../src/main/java/com/ufund/api/ufundapi/service/CupboardService.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'ufund-api/src/main/java') diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java index 993e7c1..859194a 100644 --- a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java +++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java @@ -119,6 +119,9 @@ public class CupboardService { if (checkoutAmount <= 0) { throw new IllegalArgumentException("Amount must be greater than 0"); } + if ((checkoutAmount % 1 != 0) && (cupboardDAO.getNeed(id).getType() == Need.GoalType.PHYSICAL)) { + throw new IllegalArgumentException("Physical amounts must be whole numbers"); + } authService.keyIsValid(key); Need need = cupboardDAO.getNeed(id); need.incrementCurrent(checkoutAmount); -- cgit v1.2.3 From c561e9a5b36bafbb5e6f277b04f112941c2231a5 Mon Sep 17 00:00:00 2001 From: Gunther6070 Date: Wed, 2 Apr 2025 16:56:27 -0400 Subject: Implemented new endpoint to get total number of users --- .../api/ufundapi/controller/UserController.java | 26 ++++++++++++++++++++++ .../ufund/api/ufundapi/persistence/UserDAO.java | 10 +++++++++ .../api/ufundapi/persistence/UserFileDAO.java | 7 ++++++ .../ufund/api/ufundapi/service/UserService.java | 10 +++++++++ 4 files changed, 53 insertions(+) (limited to 'ufund-api/src/main/java') diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java index a34e891..653a925 100644 --- a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java +++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java @@ -94,6 +94,32 @@ public class UserController { } + /** + * Responds to the GET request with the total number of users + * + * @param key The authentication key of the user + * @return ResponseEntity with amount and HTTP status of OK
+ * ResponseEntity with HTTP status of UNAUTHORIZED if user is not aa manager
+ * ResponseEntity with HTTP status of INTERNAL_SERVER_ERROR otherwise + */ + @GetMapping("/userCount") + public ResponseEntity getUserCount(@RequestHeader("jelly-api-key") String key) { + LOG.log(Level.INFO, "GET /userAmount"); + + try { + authService.keyHasAccessToCupboard(key); + int count = userService.getUserCount(); + return new ResponseEntity<>(count, HttpStatus.OK); + } catch (IllegalAccessException ex) { + LOG.log(Level.WARNING, ex.getLocalizedMessage()); + return new ResponseEntity<>(ex.getMessage(), HttpStatus.UNAUTHORIZED); + } catch (IOException ex) { + LOG.log(Level.SEVERE, ex.getLocalizedMessage()); + return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + + } + /** * Updates a User with the provided one * diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserDAO.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserDAO.java index 29d46cf..27ba0b9 100644 --- a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserDAO.java +++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserDAO.java @@ -33,6 +33,16 @@ public interface UserDAO { */ User getUser(String username) throws IOException; + /** + * Retrieves the total count of users + * + * @return a {@link int amount} number of users + *
+ * + * @throws IOException if an issue with underlying storage + */ + int getUserCount() throws IOException; + /** * Creates and saves a {@linkplain User user} * diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserFileDAO.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserFileDAO.java index ec94da8..7f1fadd 100644 --- a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserFileDAO.java +++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserFileDAO.java @@ -57,6 +57,13 @@ public class UserFileDAO implements UserDAO { } } + @Override + public int getUserCount() { + synchronized (users) { + return users.size(); + } + } + @Override public User getUser(String username) { synchronized (users) { diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/UserService.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/UserService.java index 6e27f50..8b34e68 100644 --- a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/UserService.java +++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/UserService.java @@ -55,6 +55,16 @@ public class UserService { return userDAO.getUser(username); } + /** + * Returns the total number of users + * + * @return The number of users + * @throws IOException If there was any problem saving the file + */ + public int getUserCount() throws IOException { + return userDAO.getUserCount(); + } + /** * Updates a user * -- cgit v1.2.3 From f8641c164ddc3a0ae4e8e81aa8f5595ce751b17c Mon Sep 17 00:00:00 2001 From: Gunther6070 Date: Wed, 2 Apr 2025 16:57:07 -0400 Subject: Implemented new endpoint to get total number of users --- .../src/main/java/com/ufund/api/ufundapi/controller/UserController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ufund-api/src/main/java') diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java index 653a925..c6e622c 100644 --- a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java +++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java @@ -102,7 +102,7 @@ public class UserController { * ResponseEntity with HTTP status of UNAUTHORIZED if user is not aa manager
* ResponseEntity with HTTP status of INTERNAL_SERVER_ERROR otherwise */ - @GetMapping("/userCount") + @GetMapping("/count") public ResponseEntity getUserCount(@RequestHeader("jelly-api-key") String key) { LOG.log(Level.INFO, "GET /userAmount"); -- cgit v1.2.3