From be699c1b24ba4f537da07a823067f7b3b030ad5a Mon Sep 17 00:00:00 2001
From: birkon <birkon@stud.ntnu.no>
Date: Tue, 25 Apr 2023 13:01:31 +0200
Subject: [PATCH] added relation table between fridge and product

---
 .../v233/SmartMat/entity/Fridge.java          | 11 +++----
 .../fridgeProduct/FridgeProductAsso.java      | 33 +++++++++++++++++++
 .../entity/fridgeProduct/FridgeProductId.java | 23 +++++++++++++
 .../v233/SmartMat/entity/product/Product.java |  6 ++--
 4 files changed, 65 insertions(+), 8 deletions(-)
 create mode 100644 src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java
 create mode 100644 src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java

diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Fridge.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Fridge.java
index a8a0e014..b8d5d0d5 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Fridge.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/Fridge.java
@@ -9,6 +9,7 @@ import lombok.AllArgsConstructor;
 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;
 
 /**
@@ -34,10 +35,8 @@ public class Fridge{
     @Column(name = "group_id")
     long groupId;
     
-    @ManyToMany
-    @JoinTable(name = "fridge_product",
-        joinColumns = @JoinColumn(name = "fridge_id"),
-        inverseJoinColumns = @JoinColumn(name = "ean"))
-    @JsonIgnoreProperties("fridges")
-    List<Product> products;
+    @OneToMany
+    @JoinColumn(name = "ean")
+    @JsonIgnoreProperties("fridge")
+    List<FridgeProductAsso> products;
 }
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
new file mode 100644
index 00000000..6cdbc636
--- /dev/null
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductAsso.java
@@ -0,0 +1,33 @@
+package ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct;
+
+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.product.Product;
+
+import java.sql.Date;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity(name = "fridge_product")
+@IdClass(FridgeProductId.class)
+public class FridgeProductAsso {
+    @Id
+    @ManyToOne
+    @MapsId("fridge_id")
+    @JoinColumn(name = "fridge_id")
+    private Fridge fridgeId;
+
+    @Id
+    @ManyToOne
+    @MapsId("ean")
+    @JoinColumn(name = "ean")
+    private Product ean;
+
+    @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
new file mode 100644
index 00000000..7bbec60d
--- /dev/null
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/fridgeProduct/FridgeProductId.java
@@ -0,0 +1,23 @@
+package ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct;
+
+
+import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * This class represents a fridge product association id
+ * @author Birk
+ * @version 1.0
+ * @since 25.04.2023
+ */
+@EqualsAndHashCode
+@NoArgsConstructor
+@AllArgsConstructor
+public class FridgeProductId implements Serializable {
+    private long fridgeId;
+
+    private long ean;
+}
diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java
index 67f6757f..6cbb1672 100644
--- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java
+++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java
@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import ntnu.idatt2016.v233.SmartMat.entity.Fridge;
 import ntnu.idatt2016.v233.SmartMat.entity.Recipe;
+import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso;
 
 import java.util.List;
 
@@ -61,9 +62,10 @@ public class Product{
             inverseJoinColumns = @JoinColumn(name = "allergy_name"))
     List<Allergy> allergies;
 
-    @ManyToMany(mappedBy = "products")
+    @OneToMany
+    @JoinColumn(name = "ean")
     @JsonIgnoreProperties({"products"})
-    List<Fridge> fridges;
+    List<FridgeProductAsso> fridges;
     
     @ManyToMany(mappedBy = "products")
     @JsonIgnoreProperties({"products"})
-- 
GitLab