package io.budgetapp.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import liquibase.util.MD5Util;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import java.io.Serializable;
import java.security.Principal;
import java.util.Date;
/**
*
*/
@Entity
@Table(name = "users")
@JsonIgnoreProperties(ignoreUnknown = true)
public class User implements Principal, Serializable {
private static final long serialVersionUID = 3868269731826822792L;
private Long id;
private String username;
private String password;
private String name;
private Date createdAt;
private String currency;
// not in DB
private String token;
// end
public User() {
}
public User(long id) {
this.id = id;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
@JsonIgnore
public String getPassword() {
return password;
}
@Override
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at", insertable = false, nullable = false, updatable = false)
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
// not in DB
@Transient
@JsonProperty("avatar")
public String getAvatar() {
return "https://www.gravatar.com/avatar/" + MD5Util.computeMD5(getUsername());
}
@Transient
@JsonProperty("token")
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
// end
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("User{");
sb.append("id=").append(id);
sb.append(", username='").append(username).append('\'');
sb.append('}');
return sb.toString();
}
}