package com.eisti.account;
import java.time.ZonedDateTime;
import javax.persistence.*;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import com.eisti.models.Station.Station;
import com.fasterxml.jackson.annotation.JsonIgnore;
@SuppressWarnings("serial")
@Entity
@Table(name = "account")
public class Account implements java.io.Serializable {
@Id
@GeneratedValue
private Long id;
@Column(unique = true)
private String email;
@JsonIgnore
private String password;
private String role = "ROLE_USER";
private Instant created;
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
@JoinTable(name = "favorites", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "station_id"))
private List<Station> favorites;
protected Account() {
favorites = new ArrayList<>();
}
public Account(String email, String password, String role) {
this();
this.email = email;
this.password = password;
this.role = role;
this.created = Instant.now();
}
public Long getId() {
return id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public Instant getCreated() {
return created;
}
public List<Station> getFavorites() {
return favorites;
}
public boolean containsStationFromFavorite(Station station){
return favorites.contains(station);
}
public boolean deleteStationFromFavorite(Station station){
if (containsStationFromFavorite(station))
return this.favorites.remove(station);
return false;
}
public boolean addFavoriteStation(Station station){
return favorites.add(station);
}
}