package com.healthcare.ohctech.entity; import com.fasterxml.jackson.annotation.JsonManagedReference; import jakarta.persistence.*; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import java.util.Collection; import java.util.Set; import java.util.stream.Collectors; @Entity @Table(name = "users") public class User implements UserDetails { /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false) private String password; @Column(name = "is_account_non_locked") private Boolean isAccountNonLocked; @Column(name = "is_enabled") private Boolean isEnabled; @Column(name = "is_credentials_non_expired") private Boolean isCredentialsNonExpired; @Column(name = "is_account_non_expired") private Boolean isAccountNonExpired; @Column(name = "failed_attempt") private Integer failedAttempt; @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE, CascadeType.PERSIST}) @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id")) @JsonManagedReference private Set roles; @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE, CascadeType.PERSIST}) @JoinTable(name = "users_ohcs", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "ohc_id", referencedColumnName = "id")) @JsonManagedReference private Set ohcTypes; @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private RefreshToken refreshToken; @Override public Collection getAuthorities() { return roles.stream().map(role -> new SimpleGrantedAuthority(role.getRoleName())).collect(Collectors.toSet()); } @Override public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public boolean isAccountNonExpired() { return isAccountNonExpired; } public void setAccountNonExpired(Boolean accountNonExpired) { isAccountNonExpired = accountNonExpired; } @Override public boolean isAccountNonLocked() { return isAccountNonLocked; } public void setAccountNonLocked(Boolean accountNonLocked) { isAccountNonLocked = accountNonLocked; } @Override public boolean isCredentialsNonExpired() { return isCredentialsNonExpired; } public void setCredentialsNonExpired(Boolean credentialsNonExpired) { isCredentialsNonExpired = credentialsNonExpired; } @Override public boolean isEnabled() { return isEnabled; } public void setEnabled(Boolean enabled) { isEnabled = enabled; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public RefreshToken getRefreshToken() { return refreshToken; } public void setRefreshToken(RefreshToken refreshToken) { this.refreshToken = refreshToken; } public Integer getFailedAttempt() { return failedAttempt; } public void setFailedAttempt(Integer failedAttempt) { this.failedAttempt = failedAttempt; } public Set getRoles() { return roles; } public void setRoles(Set roles) { this.roles = roles; } public Set getOhcTypes() { return ohcTypes; } public void setOhcTypes(Set ohcTypes) { this.ohcTypes = ohcTypes; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", isAccountNonLocked=" + isAccountNonLocked + ", isEnabled=" + isEnabled + ", isCredentialsNonExpired=" + isCredentialsNonExpired + ", isAccountNonExpired=" + isAccountNonExpired + ", failedAttempt=" + failedAttempt + ", roles=" + roles + ", ohcTypes=" + ohcTypes + ", refreshToken=" + refreshToken + '}'; } }