Product.java
package cz.vsb.crm.model;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Index;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
@Entity
@Table(name = "products", indexes = {
@Index(name = "idx_product_deactivated", columnList = "deactivated_at")
})
public class Product extends BaseEntity implements SoftDeletable {
@NotBlank
@Size(min = 2, max = 255)
@Column(nullable = false)
private String name;
@Size(max = 1000)
private String description;
@NotNull
@DecimalMin(value = "0.0", message = "price must not be negative")
@Column(nullable = false)
private BigDecimal price;
@Min(value = 0, message = "stock must not be negative")
private Integer stock;
@Column(name = "deactivated_at")
private LocalDate deactivatedAt;
@OneToMany(mappedBy = "product")
private List<OrderProduct> orderProducts = new ArrayList<>();
@OneToMany(mappedBy = "product")
private List<LeadProduct> leadProducts = new ArrayList<>();
}