Lead.java
package cz.vsb.crm.model;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Index;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.validation.constraints.NotNull;
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 = "leads", indexes = {
@Index(name = "idx_lead_account", columnList = "account_id"),
@Index(name = "idx_lead_assigned", columnList = "assigned_to"),
@Index(name = "idx_lead_status", columnList = "status"),
@Index(name = "idx_lead_created_date", columnList = "created_date")
})
public class Lead extends BaseEntity {
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "account_id", nullable = false)
private Account account;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assigned_to")
private User assignedTo;
private String source = "Website";
private String status = "New";
@Column(name = "lead_value")
private BigDecimal value;
@Column(name = "created_date")
private LocalDate createdDate;
@OneToMany(mappedBy = "lead", cascade = CascadeType.ALL, orphanRemoval = true)
private List<LeadProduct> leadProducts = new ArrayList<>();
@OneToMany(mappedBy = "lead")
private List<Order> orders = new ArrayList<>();
public Lead() {
this.createdDate = LocalDate.now();
}
}