package site.easystartup.web.domain.model; import lombok.*; import org.hibernate.Hibernate; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import site.easystartup.web.project.domain.model.Participant; import javax.persistence.*; import java.util.*; @Data @RequiredArgsConstructor @Entity @Table(name = "usr") public class User implements UserDetails { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "user_id") private long id; private String username; private String password; private boolean active; private String full_name; private String status; private String iconPath; private String email; @ElementCollection(targetClass = String.class, fetch = FetchType.EAGER) @CollectionTable(name = "user_tag", joinColumns = @JoinColumn(name = "user_id")) private Set tags; @ElementCollection(targetClass = String.class, fetch = FetchType.EAGER) @CollectionTable(name = "user_profession", joinColumns = @JoinColumn(name = "user_id")) private Set professions; @ElementCollection(targetClass = Long.class, fetch = FetchType.EAGER) @CollectionTable(name = "user_projects", joinColumns = @JoinColumn(name = "user_id")) private Set projects; @ManyToMany(mappedBy = "requests") private List requests; @ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER) @CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id")) @Enumerated(EnumType.STRING) private Set roles; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false; User user = (User) o; return Objects.equals(id, user.id); } @Override public int hashCode() { return getClass().hashCode(); } public boolean isModer() { if (roles.contains(Role.MODER) || roles.contains(Role.ADMIN)) return true; return false; } public boolean isAdmin() { if (roles.contains(Role.ADMIN)) return true; return false; } public boolean isPremium() { if (roles.contains(Role.PREMIUM) || roles.contains(Role.ADMIN)) return true; return false; } @Override public Collection getAuthorities() { Collection authorities = new ArrayList<>(); getRoles().forEach(role -> authorities.add(new SimpleGrantedAuthority(role.name()))); return authorities; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } }