Account.java
package cz.vsb.crm.model;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Index;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
@Entity
@Table(name = "accounts", indexes = {
@Index(name = "idx_account_deactivated", columnList = "deactivated_at")
})
public class Account extends BaseEntity implements SoftDeletable {
@NotBlank
@Size(max = 255)
@Column(name = "company_name", nullable = false)
private String companyName;
@Size(max = 255)
private String industry;
@Size(max = 2000)
private String address;
@Size(max = 50)
@Pattern(regexp = "^$|^[+]?[0-9\\s\\-()]{6,20}$", message = "must be a valid phone number")
private String phone;
@Email
@Size(max = 255)
private String email;
@Size(max = 100)
private String type;
@Size(max = 255)
@Column(name = "contact_name")
private String contactName;
@Email
@Size(max = 255)
@Column(name = "contact_email")
private String contactEmail;
@Size(max = 50)
@Pattern(regexp = "^$|^[+]?[0-9\\s\\-()]{6,20}$", message = "must be a valid phone number")
@Column(name = "contact_phone")
private String contactPhone;
@Size(max = 255)
@Column(name = "contact_position")
private String contactPosition;
@Column(name = "deactivated_at")
private LocalDate deactivatedAt;
@OneToMany(mappedBy = "account", cascade = CascadeType.PERSIST)
private List<Lead> leads = new ArrayList<>();
@OneToMany(mappedBy = "account", cascade = CascadeType.PERSIST)
private List<Order> orders = new ArrayList<>();
}