Recipe.java
package ntnu.idatt2016.v233.SmartMat.entity.product;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
import ntnu.idatt2016.v233.SmartMat.entity.user.User;
/**
* Recipe is an entity class representing a recipe in the system.
*
* @author Anders, Stian, Birk
* @version 1.7
*/
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name = "recipe")
@Data
public class Recipe {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "recipe_id")
long id;
@Column(name = "recipe_name")
String name;
@Column(name = "recipe_description")
String description;
@Column(name = "image_url")
String imageUrl;
@Column(name = "guide")
String guide;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}
,mappedBy = "recipes"
)
@JsonIgnoreProperties({"recipes"})
List<Product> products;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}
)
@JoinTable(
name = "favorite_recipes",
joinColumns = @JoinColumn(name = "recipe_id"),
inverseJoinColumns = @JoinColumn(name = "username"))
@JsonIgnore
List<User> users;
/**
* Adds a product to the recipe
* @param product product to add
*/
public void addProduct(Product product){
if(products == null){
products = new ArrayList<>();
}
products.add(product);
}
/**
* Adds a user to the recipe
* used for adding favorites
* @param user user to add
*/
public void addUser(User user){
if(users == null){
users = new ArrayList<>();
}
users.add(user);
}
}