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 6e6ce1e9aaa065dc0e066b664933686eb301bb9d..9053405f2ca4b5722ddfeb6e36885138023aac7f 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 @@ -8,6 +8,8 @@ import ntnu.idatt2016.v233.SmartMat.service.group.FridgeService; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.sql.Date; + /** * Controller for fridges API, providing endpoints for fridge management * @@ -64,6 +66,7 @@ public class FridgeController { /** * Removes a product from the fridge of a group + * todo: remove the date parameter when the frontend is done * * @param groupId the id of the group * group must exist @@ -80,7 +83,7 @@ public class FridgeController { } try { - if (fridgeService.removeProductFromFridge(groupId, productId)) { + if (fridgeService.removeProductFromFridge(groupId, productId, Date.valueOf("2023-04-24"))) { return ResponseEntity.ok("Success"); } return ResponseEntity.badRequest().body("Product not found in the fridge"); 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 6cdbc6362124350155fd9b30fd7321c7f012ca9e..4719dc3cac54e4fe298779aae2e1b5324da51693 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 @@ -4,7 +4,7 @@ import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import ntnu.idatt2016.v233.SmartMat.entity.Fridge; +import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge; import ntnu.idatt2016.v233.SmartMat.entity.product.Product; import java.sql.Date; @@ -27,6 +27,8 @@ public class FridgeProductAsso { @JoinColumn(name = "ean") private Product ean; + @Id + @MapsId("purchase_date") @Column(name = "purchase_date") private Date purchaseDate; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java index 7bbec60dbcd8b02d803833e394a8c935bba68e76..513bb5e964287032235d2f1c789a2f5e49b44963 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java @@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import java.io.Serializable; +import java.sql.Date; /** * This class represents a fridge product association id @@ -20,4 +21,6 @@ public class FridgeProductId implements Serializable { private long fridgeId; private long ean; + + private Date purchaseDate; } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java index b875e8ae29d6bb236e18a259b9ee7728ddd3b80d..056f80fb53e403aa945b912b07589df077f44a37 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java @@ -10,14 +10,13 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso; -import ntnu.idatt2016.v233.SmartMat.entity.product.Product; /** * Fridge is an entity class representing a fridge in the system. * - * @author Anders - * @version 1.1.002 - * @since 15.04.2023 + * @author Anders & Birk + * @version 1.2 + * @since 25.04.2023 */ @NoArgsConstructor @@ -34,17 +33,9 @@ public class Fridge{ @Column(name = "group_id") long groupId; -<<<<<<< HEAD:src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Fridge.java @OneToMany @JoinColumn(name = "ean") @JsonIgnoreProperties("fridge") List<FridgeProductAsso> products; -======= - @ManyToMany - @JoinTable(name = "fridge_product", - joinColumns = @JoinColumn(name = "fridge_id"), - inverseJoinColumns = @JoinColumn(name = "ean")) - @JsonIgnoreProperties({"allergies", "fridges"}) - List<Product> products; ->>>>>>> 538a2102fb1b5e656159ddd04dad3543ea253234:src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Fridge.java + } 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 new file mode 100644 index 0000000000000000000000000000000000000000..4402cc48bb80af0597a523e6870dab2815f2ad02 --- /dev/null +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/repository/group/FridgeProductAssoRepository.java @@ -0,0 +1,14 @@ +package ntnu.idatt2016.v233.SmartMat.repository.group; + +import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso; +import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductId; +import org.springframework.data.jpa.repository.JpaRepository; + +/** + * FridgeProductAssoRepository is a repository class for fridge product associations + * @author Birk + * @version 1.0 + * @since 25.04.2023 + */ +public interface FridgeProductAssoRepository extends JpaRepository<FridgeProductAsso, FridgeProductId> { +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..34f0e7cdcd33628e2c7ddf907025cd78ffb1428c --- /dev/null +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/group/FridgeProductAssoService.java @@ -0,0 +1,55 @@ +package ntnu.idatt2016.v233.SmartMat.service.group; + +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.product.Product; +import ntnu.idatt2016.v233.SmartMat.repository.ProductRepository; +import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeProductAssoRepository; +import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeRepository; +import ntnu.idatt2016.v233.SmartMat.service.product.ProductService; +import org.springframework.stereotype.Service; + +import java.sql.Date; + +@Service +@AllArgsConstructor +public class FridgeProductAssoService { + + FridgeProductAssoRepository fridgeProductAssoRepository; + + FridgeRepository fridgeRepository; + + ProductRepository productRepository; + + /** + * Creates a fridge product association + * 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); + fridgeProductAssoRepository.save(temp); + return temp; + } + + /** + * Deletes a fridge product association + * @param fridgeProductAsso the fridge product association to delete + */ + public void deleteFridgeProductAsso(FridgeProductAsso fridgeProductAsso) { + fridgeProductAsso.getFridgeId().getProducts().remove(fridgeProductAsso); + fridgeProductAsso.getEan().getFridges().remove(fridgeProductAsso); + fridgeProductAssoRepository.delete(fridgeProductAsso); + + fridgeRepository.save(fridgeProductAsso.getFridgeId()); + + productRepository.save(fridgeProductAsso.getEan()); + } +} 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 c36c80847d01bace953ebdacab1494ae1a1db874..d458bf76726d972ebbaa32384746950840fbc158 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 @@ -1,12 +1,15 @@ package ntnu.idatt2016.v233.SmartMat.service.group; import lombok.AllArgsConstructor; +import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso; import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge; import ntnu.idatt2016.v233.SmartMat.repository.group.FridgeRepository; import ntnu.idatt2016.v233.SmartMat.entity.product.Product; import ntnu.idatt2016.v233.SmartMat.service.product.ProductService; import org.springframework.stereotype.Service; +import java.sql.Date; +import java.time.LocalDate; import java.util.Optional; /** @@ -23,6 +26,8 @@ public class FridgeService { private final FridgeRepository fridgeRepository; private final ProductService productService; + private final FridgeProductAssoService fridgeProductAssoService; + /** * Gets the fridge of a group * @@ -47,10 +52,11 @@ public class FridgeService { if (product.isPresent()) { Product productToAdd = product.get(); - if (fridge.getProducts().contains(productToAdd)) { + FridgeProductAsso temp = new FridgeProductAsso(fridge, productToAdd, new Date(LocalDate.now().toEpochDay())); + if (fridge.getProducts().contains(temp)) { return false; } - fridge.getProducts().add(productToAdd); + fridge.getProducts().add(temp); fridgeRepository.save(fridge); return true; } else { @@ -66,20 +72,35 @@ public class FridgeService { * @param ean the ean of the product * @return true if the product was removed */ - public boolean removeProductFromFridge(long groupId, long ean) { + public boolean removeProductFromFridge(long groupId, long ean, Date purchaseDate) { Optional<Product> product = productService.getProductById(ean); Fridge fridge = fridgeRepository.findByGroupId(groupId).orElseThrow(() -> new IllegalArgumentException("Fridge does not exist")); + + if (product.isPresent()) { Product productToRemove = product.get(); - if (!fridge.getProducts().contains(productToRemove)) { + if (!fridge.getProducts().contains( + new FridgeProductAsso(fridge, productToRemove, purchaseDate))) { return false; } - fridge.getProducts().remove(productToRemove); + fridgeProductAssoService.deleteFridgeProductAsso(new FridgeProductAsso(fridge, + productToRemove, purchaseDate)); + fridgeRepository.save(fridge); return true; } else { return false; } } + + /** + * Updates a fridge + * @param fridge the fridge to update + */ + public void updateFridge(Fridge fridge) { + if (fridgeRepository.findById(fridge.getFridgeId()).isEmpty()) + return; + fridgeRepository.save(fridge); + } } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/product/ProductService.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/product/ProductService.java index 13d85862d479f6691e17009beb661867173d444d..e668812f2caab46bcd4e121be3c6cc979bf517a4 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/service/product/ProductService.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/service/product/ProductService.java @@ -83,5 +83,16 @@ public class ProductService { return ProductUtil.getVolumeFromProduct(productRepository.findById(id).get()); } + /** + * Updates a product + * @param product The product to update + */ + public void updateProduct(Product product) { + if(productRepository.findById(product.getEan()).isEmpty()) + return; + + productRepository.save(product); + } + }