diff --git a/resq/backend/resq/src/main/java/com/groupa1/resq/controller/ResourceController.java b/resq/backend/resq/src/main/java/com/groupa1/resq/controller/ResourceController.java index 524bfec5..a1438e70 100644 --- a/resq/backend/resq/src/main/java/com/groupa1/resq/controller/ResourceController.java +++ b/resq/backend/resq/src/main/java/com/groupa1/resq/controller/ResourceController.java @@ -69,9 +69,10 @@ public ResponseEntity> filterByCategory(@RequestParam(required @RequestParam(required = false) BigDecimal longitude, @RequestParam(required = false) BigDecimal latitude, @RequestParam(required = false) Long userId, - @RequestParam(required = false) EResourceStatus status){ + @RequestParam(required = false) EResourceStatus status, + @RequestParam(required = false) Long receiverId){ log.info("Filtering resources by category"); - return resourceService.filterResource(latitude, longitude, categoryTreeId, userId, status); + return resourceService.filterResource(latitude, longitude, categoryTreeId, userId, status, receiverId); } @PreAuthorize("hasRole('COORDINATOR') or hasRole('VICTIM') or hasRole('RESPONDER')") @@ -81,8 +82,9 @@ public ResponseEntity> filterByCategoryRectangularScope(@Reque @RequestParam(required = false) BigDecimal latitude1, @RequestParam(required = false) BigDecimal longitude2, @RequestParam(required = false) BigDecimal latitude2, - @RequestParam(required = false) Long userId) { + @RequestParam(required = false) Long userId, + @RequestParam(required = false) Long receiverId) { log.info("Filtering resources by category, rectangular scope"); - return resourceService.filterResourceRectangularScope(latitude1, longitude1, latitude2, longitude2, categoryTreeId, userId); + return resourceService.filterResourceRectangularScope(latitude1, longitude1, latitude2, longitude2, categoryTreeId, userId, receiverId); } } diff --git a/resq/backend/resq/src/main/java/com/groupa1/resq/service/ResourceService.java b/resq/backend/resq/src/main/java/com/groupa1/resq/service/ResourceService.java index bc1fdabe..92083527 100644 --- a/resq/backend/resq/src/main/java/com/groupa1/resq/service/ResourceService.java +++ b/resq/backend/resq/src/main/java/com/groupa1/resq/service/ResourceService.java @@ -94,7 +94,7 @@ public ResponseEntity deleteResource(Long resourceId){ return ResponseEntity.ok("Resource deleted successfully"); } - public ResponseEntity> filterResource(BigDecimal latitude, BigDecimal longitude, String categoryTreeId, Long userId, EResourceStatus status){ + public ResponseEntity> filterResource(BigDecimal latitude, BigDecimal longitude, String categoryTreeId, Long userId, EResourceStatus status, Long receiverId){ Specification spec = Specification.where(null); if (longitude != null && latitude != null) { @@ -112,6 +112,9 @@ public ResponseEntity> filterResource(BigDecimal latitude, Big if (status != null){ spec = spec.and(ResourceSpecifications.hasStatus(status)); } + if (receiverId != null){ + spec = spec.and(ResourceSpecifications.hasReceiverId(receiverId)); + } return ResponseEntity.ok(resourceRepository.findAll(spec).stream().map(resource -> resourceConverter.convertToDto(resource)).toList()); } @@ -119,7 +122,7 @@ public ResponseEntity> filterByDistance(BigDecimal latitude, B return ResponseEntity.ok(resourceRepository.filterByDistance(latitude, longitude, distance).stream().map(resource -> resourceConverter.convertToDto(resource)).toList()); } - public ResponseEntity> filterResourceRectangularScope(BigDecimal latitude1, BigDecimal longitude1, BigDecimal latitude2, BigDecimal longitude2, String categoryTreeId, Long userId){ + public ResponseEntity> filterResourceRectangularScope(BigDecimal latitude1, BigDecimal longitude1, BigDecimal latitude2, BigDecimal longitude2, String categoryTreeId, Long userId, Long receiverId){ Specification spec = Specification.where(null); if (longitude1 != null && latitude1 != null && longitude2 != null && latitude2 != null) { @@ -133,6 +136,9 @@ public ResponseEntity> filterResourceRectangularScope(BigDecim if (userId != null) { spec = spec.and(ResourceSpecifications.hasOwnerId(userId)); } + if (receiverId != null){ + spec = spec.and(ResourceSpecifications.hasReceiverId(receiverId)); + } return ResponseEntity.ok(resourceRepository.findAll(spec).stream().map(resource -> resourceConverter.convertToDto(resource)).toList()); } diff --git a/resq/backend/resq/src/main/java/com/groupa1/resq/specification/ResourceSpecifications.java b/resq/backend/resq/src/main/java/com/groupa1/resq/specification/ResourceSpecifications.java index 69d5d5bd..5634f4be 100644 --- a/resq/backend/resq/src/main/java/com/groupa1/resq/specification/ResourceSpecifications.java +++ b/resq/backend/resq/src/main/java/com/groupa1/resq/specification/ResourceSpecifications.java @@ -37,4 +37,8 @@ public static Specification hasStatus(EResourceStatus status){ return (root, query, builder) -> builder.equal(root.get("status"), status); } + public static Specification hasReceiverId(Long receiverId){ + return (root, query, builder) -> builder.equal(root.get("receiver").get("id"), receiverId); + } + }