Allergy.java

package ntnu.idatt2016.v233.SmartMat.entity.product;

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.user.User;

import java.util.ArrayList;
import java.util.List;

/**
 * Allergy is an entity class representing an allergy
 * 
 * @author Stian Lyng and Anders
 * @version 1.3
 */

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name = "allergy")
@Data
public class Allergy{

    @Id
    @Column(name = "allergy_name")
    String name;
    @Column(name = "allergy_description")
    String description;

    @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
    @JoinTable(
            name = "product_allergy",
            joinColumns = @JoinColumn(name = "allergy_name"),
            inverseJoinColumns = @JoinColumn(name = "ean") )
    @JsonIgnore
    private List<Product> products;

    @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
    @JoinTable(
            name = "user_allergy",
            joinColumns = @JoinColumn(name = "allergy_name"),
            inverseJoinColumns = @JoinColumn(name = "username") )
    @JsonIgnore
    private List<User> users;

    /**
     * adds a user to the allergy
     * @param tempuser adds a user to the list of users with this allergy
     */
    public void addUser(User tempuser) {
        if (users == null)
            users = new ArrayList<>();

        users.add(tempuser);

    }

    /**
     * adds a product to the allergy
     * @param product adds a product to the list of products with this allergy
     */
    public void addProduct(Product product) {
        if (products == null)
            products = new ArrayList<>();

        if(!products.contains(product))
            products.add(product);
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Allergy allergy)) return false;
        return getName().equals(allergy.getName());
    }

    @Override
    public int hashCode() {
        return getName().hashCode();
    }

}