From bac3910d7ebb543837fdbe7aeda5d09d01e00d30 Mon Sep 17 00:00:00 2001 From: Pedro Cardona <pedropca@stud.ntnu.no> Date: Sun, 30 Apr 2023 17:01:54 +0200 Subject: [PATCH] Endpoint for waste product was added --- .../controller/group/FridgeController.java | 11 ++++++++++ .../SmartMat/service/group/FridgeService.java | 22 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/FridgeController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/FridgeController.java index c77f2164..2aedb77c 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/FridgeController.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/group/FridgeController.java @@ -90,6 +90,17 @@ public class FridgeController { } } + /** + * Deletes a product from the fridge and creates a waste object from it. + * + * @param fridgeProductId The id of the fridge product association to be deleted + * @return A ResponseEntity with status code 200 if successful, or status code 404 if the specified fridge product association was not found. + */ + @DeleteMapping("/waste/product/{fridgeProductId}") + public ResponseEntity<?> wasteProductFromFridge(@PathVariable("fridgeProductId") long fridgeProductId){ + return fridgeService.wasteProductFromFridge(fridgeProductId).map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build()); + } + /** * Deletes all products in a fridge * @param fridgeId the id of the fridge diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeService.java index 1afcabe2..a5fe0821 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeService.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeService.java @@ -2,18 +2,22 @@ package ntnu.idatt2016.v233.SmartMat.service.group; import lombok.AllArgsConstructor; import ntnu.idatt2016.v233.SmartMat.dto.request.FridgeProductRequest; +import ntnu.idatt2016.v233.SmartMat.entity.Waste; import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso; import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge; import ntnu.idatt2016.v233.SmartMat.entity.group.Group; import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeRepository; import ntnu.idatt2016.v233.SmartMat.entity.product.Product; import ntnu.idatt2016.v233.SmartMat.repository.group.GroupRepository; +import ntnu.idatt2016.v233.SmartMat.repository.group.WasteRepository; import ntnu.idatt2016.v233.SmartMat.repository.product.FridgeProductAssoRepo; import ntnu.idatt2016.v233.SmartMat.service.product.ProductService; +import ntnu.idatt2016.v233.SmartMat.util.ProductUtil; import org.springframework.context.annotation.aspectj.EnableSpringConfigured; import org.springframework.stereotype.Service; +import java.sql.Timestamp; import java.time.LocalDate; import java.util.Date; import java.util.Optional; @@ -34,6 +38,8 @@ public class FridgeService { private final GroupRepository groupRepository; + private final WasteRepository wasteRepository; + private final FridgeProductAssoRepo fridgeProductAssoRepo; /** @@ -165,6 +171,22 @@ public class FridgeService { } } + /** + * Deletes a product from the fridge and saves a waste object representing the discarded product. + * @param fridgeProductId the ID of the fridge product association to delete + * @return an Optional containing the saved waste object, or an empty Optional if the fridge product association with the given ID is not found + */ + public Optional<Object> wasteProductFromFridge(long fridgeProductId){ + Optional<FridgeProductAsso> fridgeProductAsso = fridgeProductAssoRepo.findById(fridgeProductId); + if(fridgeProductAsso.isEmpty()) return Optional.empty(); + FridgeProductAsso fridgeProductAsso1 = fridgeProductAsso.get(); + fridgeProductAssoRepo.delete(fridgeProductAsso1); + String unit = ProductUtil.getVolumeFromProduct(fridgeProductAsso1.getEan()).get().get(0); + + return Optional.of(wasteRepository.save(Waste.builder().amount(fridgeProductAsso1.getAmount()).unit(unit).ean(fridgeProductAsso1.getEan()).groupId(fridgeProductAsso1.getFridgeId().getGroup()).timestamp(new Timestamp(System.currentTimeMillis())).build())); + } + + /** * Delete all products in a fridge * @param fridgeId the id of the fridge -- GitLab