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 1a02f49d9a6f563e6311a47b3279f02aa37b73a9..3e17d724a814fdec4b2d3c9e6c7ad080189a1196 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 @@ -68,7 +68,7 @@ public class FridgeController { } try { - if (fridgeService.addProductToFridge(groupId, productId)) { + if (fridgeService.addProductToFridge(groupId, productId, request.amount(), request.days()).isPresent()) { return ResponseEntity.ok("Success"); } return ResponseEntity.badRequest().body("Product already exists in the fridge"); @@ -87,16 +87,13 @@ public class FridgeController { * @param productId the id of the product * @return success if the product was removed, bad request if the product wasn't in the fridge, or not found if the group or product doesn't exist */ - @DeleteMapping("/group/{groupId}/product/{productId}") - public ResponseEntity<String> removeProductFromFridge(@PathVariable("groupId") long groupId, @PathVariable("productId") long productId) { - try { - fridgeService.getFridgeByGroupId(groupId).orElseThrow(); - } catch (Exception e) { - return ResponseEntity.notFound().build(); - } + + /* + @DeleteMapping("/delete/{fridgeProductId}") + public ResponseEntity<String> removeProductFromFridge(@PathVariable("fridgeProductId") long FPId) { try { - if (fridgeService.removeProductFromFridge(groupId, productId, Date.valueOf("2023-04-24"))) { + if (fridgeService.removeProductFromFridge(FPId)){ return ResponseEntity.ok("Success"); } return ResponseEntity.badRequest().body("Product not found in the fridge"); @@ -104,5 +101,6 @@ public class FridgeController { return ResponseEntity.status(500).body("Internal server error"); } } + */ } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/dto/request/FridgeProductRequest.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/dto/request/FridgeProductRequest.java index 57bee46c5621b016e24b0934dc41633e5a4f843a..199a7a9d1c121c7399c9a507397a0daa46799b13 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/dto/request/FridgeProductRequest.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/dto/request/FridgeProductRequest.java @@ -5,5 +5,5 @@ package ntnu.idatt2016.v233.SmartMat.dto.request; * @param groupId the id of the group * @param productId the id of the product */ -public record FridgeProductRequest(long groupId, long productId) { +public record FridgeProductRequest(long groupId, long productId, int amount, int days) { } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java index 14a3415aa3cb55c682d0bd3cd8e7643ff07adafe..a51e4e2f5471f5c7780cda4ec96d0c19f9243eff 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java @@ -2,10 +2,7 @@ package ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge; import ntnu.idatt2016.v233.SmartMat.entity.product.Product; @@ -13,28 +10,37 @@ import java.sql.Date; @AllArgsConstructor @NoArgsConstructor -@Data +@Getter @Setter @Entity(name = "fridge_product") @Builder @IdClass(FridgeProductId.class) public class FridgeProductAsso { + @Id + @Column(name = "fridge_product_id") + private long id; + @ManyToOne @MapsId("fridge_id") @JoinColumn(name = "fridge_id") @JsonIgnoreProperties({"products"}) private Fridge fridgeId; - @Id @ManyToOne @MapsId("ean") @JoinColumn(name = "ean") @JsonIgnoreProperties({"fridges"}) private Product ean; - @Id @MapsId("purchase_date") @Column(name = "purchase_date") private Date purchaseDate; + @Column(name = "days_to_expiration") + private int daysToExpiration; + + @Column(name = "amount") + private int amount; + + } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/FridgeProductAssoRepository.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/FridgeProductAssoRepository.java index 4402cc48bb80af0597a523e6870dab2815f2ad02..df60c1927b011215ab81200ff3af34d78d871bf9 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/FridgeProductAssoRepository.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/FridgeProductAssoRepository.java @@ -4,6 +4,9 @@ import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso; import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductId; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; +import java.util.Optional; + /** * FridgeProductAssoRepository is a repository class for fridge product associations * @author Birk @@ -11,4 +14,5 @@ import org.springframework.data.jpa.repository.JpaRepository; * @since 25.04.2023 */ public interface FridgeProductAssoRepository extends JpaRepository<FridgeProductAsso, FridgeProductId> { + Optional<FridgeProductAsso> findById(long id); } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoService.java index 9dc8b269f8f83af600c90355df152a12c6182ad4..acb95f92da394a7ac8c46d686eb5c951e5006aae 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoService.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoService.java @@ -26,21 +26,14 @@ public class FridgeProductAssoService { * the FridgeProductAssosiation object needs to be added to the fridge and product * @param fridge the fridge to add the product to * @param product the product to add to the fridge - * @param purchaseDate the date the product was purchased * @return the fridge product association */ - public FridgeProductAsso createFridgeProductAsso(Fridge fridge, Product product, Date purchaseDate) { - FridgeProductAsso temp = new FridgeProductAsso(); - temp.setFridgeId(fridge); - temp.setEan(product); - temp.setPurchaseDate(purchaseDate); + public FridgeProductAsso createFridgeProductAsso(Fridge fridge, Product product, int amount, int days) { + FridgeProductAsso temp = FridgeProductAsso.builder().fridgeId(fridge).ean(product).amount(amount).daysToExpiration(days).build(); fridgeProductAssoRepository.save(temp); - fridge.addProduct(temp); product.addFridge(temp); - fridgeRepository.save(fridge); - productRepository.save(product); return temp; @@ -56,7 +49,6 @@ public class FridgeProductAssoService { fridgeProductAssoRepository.delete(fridgeProductAsso); fridgeRepository.save(fridgeProductAsso.getFridgeId()); - productRepository.save(fridgeProductAsso.getEan()); return true; 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 6406aedf256a272b5b20103bb125a9bbba99dda0..a4849f979a9c5490ea16120102c47797fb36d3b3 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 @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; 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.FridgeProductAssoRepository; import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeRepository; import ntnu.idatt2016.v233.SmartMat.entity.product.Product; import ntnu.idatt2016.v233.SmartMat.repository.group.GroupRepository; @@ -28,6 +29,8 @@ public class FridgeService { private final FridgeRepository fridgeRepository; private final ProductService productService; + private final FridgeProductAssoRepository fridgeProductAssoRepository; + private final FridgeProductAssoService fridgeProductAssoService; private final GroupRepository groupRepository; @@ -61,20 +64,19 @@ public class FridgeService { * @param ean the ean of the product * @return true if the product was added */ - public boolean addProductToFridge(long groupId, long ean) { + public Optional<Object> addProductToFridge(long groupId, long ean, int amount, int days) { Optional<Product> product = productService.getProductById(ean); Fridge fridge = fridgeRepository.findByGroupGroupId(groupId).orElseThrow(() -> new IllegalArgumentException("Fridge does not exist")); if (product.isPresent()) { Product productToAdd = product.get(); - FridgeProductAsso temp = new FridgeProductAsso(fridge, productToAdd, new Date(LocalDate.now().toEpochDay())); + FridgeProductAsso temp = FridgeProductAsso.builder().fridgeId(fridge).ean(productToAdd).amount(amount).daysToExpiration(days).build(); if (fridge.getProducts().contains(temp)) { - return false; + return Optional.empty(); } - fridgeProductAssoService.createFridgeProductAsso(fridge, productToAdd, new Date(LocalDate.now().toEpochDay())); - return true; + return Optional.of(fridgeProductAssoService.createFridgeProductAsso(fridge, productToAdd,amount,days)); } else { - return false; + return Optional.empty(); } } @@ -83,20 +85,19 @@ public class FridgeService { * * @param groupId the id of the group * group must exist - * @param ean the ean of the product * @return true if the product was removed */ - public boolean removeProductFromFridge(long groupId, long ean, Date purchaseDate) { - Optional<Product> product = productService.getProductById(ean); - Fridge fridge = fridgeRepository.findByGroupGroupId(groupId).orElseThrow(() -> new IllegalArgumentException("Fridge does not exist")); - - + /*public boolean removeProductFromFridge( long FPId) { + FridgeProductAsso fridgeProductAsso = fridgeProductAssoRepository.findById(FPId).get(); + Optional<Product> product = productService.getProductById(fridgeProductAsso.getEan().getEan()); + Fridge fridge = fridgeRepository.findByGroupGroupId(fridgeProductAsso.getFridgeId().getFridgeId()).orElseThrow(() -> new IllegalArgumentException("Fridge does not exist")); if (product.isPresent()) { Product productToRemove = product.get(); if (!fridge.getProducts().contains( - new FridgeProductAsso(fridge, productToRemove, purchaseDate))) { + new FridgeProductAsso(fridge, productToRemove,))) { return false; } + FridgeProductAsso fridgeProductAsso1 = FridgeProductAsso.builder().id(FPId)..build() fridgeProductAssoService.deleteFridgeProductAsso(new FridgeProductAsso(fridge, productToRemove, purchaseDate)); @@ -104,7 +105,7 @@ public class FridgeService { } else { return false; } - } + }*/ /** * Updates a fridge