package ee.esutoniagodesu.domain.ac.table; import com.fasterxml.jackson.annotation.JsonIgnore; import ee.esutoniagodesu.util.iso.ISO6391; import org.hibernate.validator.constraints.Email; import javax.persistence.*; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.io.Serializable; import java.time.ZonedDateTime; import java.util.HashSet; import java.util.Set; @Entity @Table(schema = "ac", name = "user") public class User implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; @Size(max = 20) @Column(name = "uuid", length = 20, unique = true) private String uuid; @Size(max = 50) @Column(name = "first_name", length = 50) private String firstName; @Size(max = 50) @Column(name = "last_name", length = 50) private String lastName; //@Email(message = "{validation.email.message}") @Email @Size(min = 5, max = 100) @Column(length = 100, unique = true) private String email; @Column(nullable = false) private boolean activated = false; @Enumerated(EnumType.STRING) @Column(name = "lang_key", nullable = false) private ISO6391 langKey; @Size(max = 20) @Column(name = "activation_key", length = 20) @JsonIgnore private String activationKey; @CollectionTable( schema = "ac", name = "user_authority", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")}) @ElementCollection(targetClass = EAuthority.class, fetch = FetchType.EAGER) @Column(name = "name", nullable = false) @Enumerated(EnumType.STRING) private Set<EAuthority> authorities = new HashSet<>(); @OneToOne(cascade = CascadeType.ALL, mappedBy = "user") @PrimaryKeyJoinColumn private UserAccountForm accountForm; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "user", fetch = FetchType.EAGER) private Set<UserAccountExternal> accountExternals = new HashSet<>(); @NotNull @Column(name = "created_date", nullable = false) protected ZonedDateTime createdDate = ZonedDateTime.now(); public User() { } public User(String uuid) { this.uuid = uuid; } public User(String firstName, String lastName, String email, ExternalProvider externalProvider, String externalUserId) { this.firstName = firstName; this.lastName = lastName; this.email = email; this.accountExternals.add(new UserAccountExternal(externalProvider, externalUserId)); } public User(String login, String password, String firstName, String lastName, String email, String langKey) { this.accountForm = new UserAccountForm(login, password); this.firstName = firstName; this.lastName = lastName; this.email = email; this.langKey = ISO6391.valueOf(langKey); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUuid() { return uuid; } public void setUuid(String uuid) { this.uuid = uuid; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public boolean isActivated() { return activated; } public void setActivated(boolean activated) { this.activated = activated; } public ISO6391 getLangKey() { return langKey; } public void setLangKey(ISO6391 langKey) { this.langKey = langKey; } public String getActivationKey() { return activationKey; } public void setActivationKey(String activationKey) { this.activationKey = activationKey; } public UserAccountForm getAccountForm() { return accountForm; } public void setAccountForm(UserAccountForm accountForm) { this.accountForm = accountForm; } public Set<UserAccountExternal> getAccountExternals() { return accountExternals; } public ZonedDateTime getCreatedDate() { return createdDate; } public void setCreatedDate(ZonedDateTime createdDate) { this.createdDate = createdDate; } public Set<EAuthority> getAuthorities() { return authorities; } public void setAuthorities(Set<EAuthority> authorities) { this.authorities = authorities; } public void setAccountExternals(Set<UserAccountExternal> accountExternals) { this.accountExternals = accountExternals; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return !(id != null ? !id.equals(user.id) : user.id != null); } @Override public int hashCode() { return id != null ? id.hashCode() : 0; } @Override public String toString() { return "User{" + "id=" + id + ", firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + ", email='" + email + '\'' + ", activated=" + activated + ", langKey=" + langKey + ", activationKey='" + activationKey + '\'' + ", authorities=" + authorities + ", accountForm=" + accountForm + ", accountExternals=" + accountExternals + ", createdDate=" + createdDate + '}'; } }