UserSettingsEntity.java
package fr.tiogars.inception.settings.user.entities;
import java.time.Instant;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import fr.tiogars.inception.domains.auth.user.entities.UserEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
/** Persists the settings owned either by one user account or by a role profile such as ANONYMOUS. */
@Entity
@Table(name = "user_settings")
public class UserSettingsEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", unique = true)
@OnDelete(action = OnDeleteAction.CASCADE)
private UserEntity user;
@Column(name = "role_code", unique = true, length = 64)
private String roleCode;
@Column(name = "view_mode", nullable = false, length = 16)
private String viewMode;
@Column(nullable = false, updatable = false)
private Instant createdDate;
@Column(nullable = false)
private Instant lastModifiedDate;
protected UserSettingsEntity() {
// required by JPA
}
private UserSettingsEntity(UserEntity user, String roleCode, String viewMode, Instant createdDate,
Instant lastModifiedDate) {
this.user = user;
this.roleCode = roleCode;
this.viewMode = viewMode;
this.createdDate = createdDate;
this.lastModifiedDate = lastModifiedDate;
}
public static UserSettingsEntity forUser(UserEntity user, String viewMode, Instant timestamp) {
return new UserSettingsEntity(user, null, viewMode, timestamp, timestamp);
}
public static UserSettingsEntity forRole(String roleCode, String viewMode, Instant timestamp) {
return new UserSettingsEntity(null, roleCode, viewMode, timestamp, timestamp);
}
public void update(String viewMode, Instant lastModifiedDate) {
this.viewMode = viewMode;
this.lastModifiedDate = lastModifiedDate;
}
public Long getId() {
return id;
}
public UserEntity getUser() {
return user;
}
public String getRoleCode() {
return roleCode;
}
public String getViewMode() {
return viewMode;
}
public Instant getCreatedDate() {
return createdDate;
}
public Instant getLastModifiedDate() {
return lastModifiedDate;
}
}