UserView.java
package com.wilzwert.myjobs.core.domain.model.user;
import java.time.Instant;
/**
* @author Wilhelm Zwertvaegher
* Partial view of a User with minimal info for presentation
* Use for reads only
*/
public class UserView {
private final String firstName;
private final String lastName;
private final String email;
private final String username;
private final Instant createdAt;
private final EmailStatus emailStatus;
private final Integer jobFollowUpReminderDays;
private final Instant jobFollowUpReminderSentAt;
private final Lang lang;
public static Builder builder() {
return new Builder();
}
public static class Builder {
private String firstName;
private String lastName;
private String email;
private String username;
private Instant createdAt;
private EmailStatus emailStatus;
private Integer jobFollowUpReminderDays;
private Instant jobFollowUpReminderSentAt;
private Lang lang;
public Builder() {
// create empty builder, no default values as they must be provided by the infra
}
public Builder email(String email) {
this.email = email;
return this;
}
public Builder emailStatus(EmailStatus emailStatus) {
this.emailStatus = emailStatus;
return this;
}
public Builder username(String username) {
this.username = username;
return this;
}
public Builder firstName(String firstName) {
this.firstName = firstName;
return this;
}
public Builder lastName(String lastName) {
this.lastName = lastName;
return this;
}
public Builder jobFollowUpReminderDays(Integer jobFollowUpReminderDays) {
this.jobFollowUpReminderDays = jobFollowUpReminderDays;
return this;
}
public Builder createdAt(Instant createdAt) {
this.createdAt = createdAt;
return this;
}
public Builder lang(Lang lang) {
this.lang = lang;
return this;
}
public Builder jobFollowUpReminderSentAt(Instant jobFollowUpReminderSentAt) {
this.jobFollowUpReminderSentAt = jobFollowUpReminderSentAt;
return this;
}
public UserView build() {
// build User
return new UserView(this);
}
}
private UserView(UserView.Builder builder) {
this.email = builder.email;
this.emailStatus = builder.emailStatus;
this.username = builder.username;
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.jobFollowUpReminderDays = builder.jobFollowUpReminderDays;
this.lang = builder.lang;
this.createdAt = builder.createdAt;
this.jobFollowUpReminderSentAt = builder.jobFollowUpReminderSentAt;
// FIXME : building the UserView should trigger validation
}
public String getEmail() {
return email;
}
public EmailStatus getEmailStatus() {
return emailStatus;
}
public String getUsername() {
return username;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public Integer getJobFollowUpReminderDays() { return jobFollowUpReminderDays; }
public Lang getLang() { return lang; }
public Instant getCreatedAt() {
return createdAt;
}
public Instant getJobFollowUpReminderSentAt() {return jobFollowUpReminderSentAt;}
}