User.java
package edu.ucsb.cs156.dining.entities;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ser.std.StdKeySerializers.Default;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import edu.ucsb.cs156.dining.statuses.ModerationStatus;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import java.time.LocalDate;
import java.util.List;
/**
* This is a JPA entity that represents a user.
*/
@Data
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
@Entity(name = "users")
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String email;
private String googleSub;
private String pictureUrl;
private String fullName;
private String givenName;
private String familyName;
private boolean emailVerified;
private String locale;
private String hostedDomain;
private String alias;
private String proposedAlias;
@Enumerated(EnumType.STRING)
private ModerationStatus status;
private LocalDate dateApproved;
@Builder.Default
private boolean admin=false;
@Builder.Default
private boolean moderator=false;
@ToString.Exclude
@OneToMany(mappedBy="reviewer")
@Fetch(FetchMode.JOIN)
private List<Review> reviews;
public String getAlias() {
if (this.alias == null) {
this.alias = "Anonymous User";
}
return this.alias;
}
}