User.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.util.ArrayList;
import java.util.List;
@Getter
@Setter
@Entity
@Table(name = "users", indexes = {
@Index(name = "idx_user_username", columnList = "username"),
@Index(name = "idx_user_email", columnList = "email")
})
public class User extends BaseEntity {
@NotBlank
@Size(min = 3, max = 255)
@Column(unique = true, nullable = false)
private String username;
@NotBlank
@Pattern(regexp = "Admin|Manager|User", message = "role must be one of: Admin, Manager, User")
@Column(nullable = false)
private String role = "User";
@NotBlank
@Email
@Column(unique = true, nullable = false)
private String email;
@NotBlank
@Size(min = 8, max = 255)
@Column(nullable = false)
private String password;
@OneToMany(mappedBy = "assignedTo", cascade = CascadeType.PERSIST)
private List<Lead> assignedLeads = new ArrayList<>();
@OneToMany(mappedBy = "createdBy", cascade = CascadeType.PERSIST)
private List<Order> createdOrders = new ArrayList<>();
}