package finki.it.phoneluxbackend.entities; import com.fasterxml.jackson.annotation.JsonIgnore; import finki.it.phoneluxbackend.data.UserRole; import lombok.*; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import javax.persistence.*; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; @Getter @Setter @ToString @EqualsAndHashCode @NoArgsConstructor @AllArgsConstructor @Entity(name = "User") @Table(name = "users") public class User implements UserDetails { @SequenceGenerator( name = "user_sequence", sequenceName = "user_sequence", allocationSize = 1 ) @Id @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "user_sequence" ) private Long id; private String firstName; private String lastName; private String email; private String password; @Enumerated(EnumType.STRING) private UserRole userRole; private Boolean locked = false; private Boolean enabled = false; @ManyToMany @JoinTable( name = "users_favourite_offers", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "offer_id") ) @JsonIgnore private List favouriteOffers = new ArrayList(); public User(String firstName, String lastName, String email, String password, UserRole userRole) { this.firstName = firstName; this.lastName = lastName; this.email = email; this.password = password; this.userRole = userRole; } public User(Long id, String firstName, UserRole userRole) { this.id = id; this.firstName = firstName; this.userRole = userRole; } public User(Long id, String firstName, String lastName, String email, UserRole userRole) { this.id = id; this.firstName = firstName; this.lastName = lastName; this.email = email; this.userRole = userRole; } @Override public Collection getAuthorities() { SimpleGrantedAuthority authority = new SimpleGrantedAuthority(userRole.name()); return Collections.singletonList(authority); } @Override public String getPassword() { return password; } @Override public String getUsername() { return email; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return !locked; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return enabled; } }