mirror of
https://git.imnavajas.es/jjimenez/erp-imprimelibros.git
synced 2026-01-30 07:38:51 +00:00
122 lines
3.2 KiB
Java
122 lines
3.2 KiB
Java
package com.imprimelibros.erp.users;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import jakarta.persistence.*;
|
|
|
|
import org.hibernate.annotations.SQLDelete;
|
|
import org.hibernate.annotations.SQLRestriction;
|
|
|
|
@Entity
|
|
@Table(name = "users_roles", uniqueConstraints = {
|
|
@UniqueConstraint(name = "ux_users_roles_active", columnNames = { "user_id", "role_id", "deleted" })
|
|
})
|
|
@SQLDelete(sql = "UPDATE users_roles SET deleted = TRUE, deleted_at = NOW() WHERE id = ?")
|
|
@SQLRestriction("deleted = false")
|
|
public class UserRole {
|
|
|
|
@Id
|
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
private Long id;
|
|
|
|
// FK a users
|
|
@ManyToOne(fetch = FetchType.LAZY)
|
|
@JoinColumn(name = "user_id", nullable = false, foreignKey = @ForeignKey(name = "FK_users_roles_user"))
|
|
private User user;
|
|
|
|
// FK a roles
|
|
@ManyToOne(fetch = FetchType.LAZY)
|
|
@JoinColumn(name = "role_id", nullable = false, foreignKey = @ForeignKey(name = "FK_users_roles_role"))
|
|
private Role role;
|
|
|
|
@Column(nullable = false)
|
|
private boolean deleted = false;
|
|
|
|
@Column(name = "deleted_at")
|
|
private LocalDateTime deletedAt;
|
|
|
|
protected UserRole() {
|
|
}
|
|
|
|
public UserRole(User user, Role role) {
|
|
this.user = user;
|
|
this.role = role;
|
|
}
|
|
|
|
/* ---- helpers ---- */
|
|
public void softDelete() {
|
|
this.deleted = true;
|
|
this.deletedAt = LocalDateTime.now();
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (this == o)
|
|
return true;
|
|
if (!(o instanceof UserRole other))
|
|
return false;
|
|
|
|
Long u1 = this.getUser() != null ? this.getUser().getId() : null;
|
|
Long r1 = this.getRole() != null ? this.getRole().getId() : null;
|
|
Long u2 = other.getUser() != null ? other.getUser().getId() : null;
|
|
Long r2 = other.getRole() != null ? other.getRole().getId() : null;
|
|
|
|
// igualdad por clave lógica (user_id, role_id) cuando existen
|
|
if (u1 != null && r1 != null && u2 != null && r2 != null) {
|
|
return u1.equals(u2) && r1.equals(r2);
|
|
}
|
|
// fallback: identidad por id si está asignado
|
|
if (this.getId() != null && other.getId() != null) {
|
|
return this.getId().equals(other.getId());
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
Long u = this.getUser() != null ? this.getUser().getId() : null;
|
|
Long r = this.getRole() != null ? this.getRole().getId() : null;
|
|
if (u != null && r != null) {
|
|
return java.util.Objects.hash(u, r);
|
|
}
|
|
return java.util.Objects.hash(getId());
|
|
}
|
|
|
|
/* ---- getters/setters ---- */
|
|
public Long getId() {
|
|
return id;
|
|
}
|
|
|
|
public User getUser() {
|
|
return user;
|
|
}
|
|
|
|
public void setUser(User user) {
|
|
this.user = user;
|
|
}
|
|
|
|
public Role getRole() {
|
|
return role;
|
|
}
|
|
|
|
public void setRole(Role role) {
|
|
this.role = role;
|
|
}
|
|
|
|
public boolean isDeleted() {
|
|
return deleted;
|
|
}
|
|
|
|
public void setDeleted(boolean deleted) {
|
|
this.deleted = deleted;
|
|
}
|
|
|
|
public LocalDateTime getDeletedAt() {
|
|
return deletedAt;
|
|
}
|
|
|
|
public void setDeletedAt(LocalDateTime deletedAt) {
|
|
this.deletedAt = deletedAt;
|
|
}
|
|
}
|