UserEntity.java
package cl.prgm.portaltrip.infrastructure.persistence;
import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.util.UUID;
import cl.prgm.portaltrip.domain.model.UserAccount;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.Version;
@Entity
@Table(name = "users")
public class UserEntity {
@Id
private UUID id;
@Column(nullable = false, unique = true, length = 320)
private String email;
@Column(name = "password_hash", nullable = false)
private String passwordHash;
@Column(name = "full_name", nullable = false, length = 100)
private String fullName;
@Column(nullable = false, length = 30)
private String role;
@Column(nullable = false, precision = 12, scale = 2)
private BigDecimal balance;
@Version
@Column(nullable = false)
private long version;
@Column(name = "created_at", nullable = false)
private OffsetDateTime createdAt;
@Column(name = "updated_at", nullable = false)
private OffsetDateTime updatedAt;
protected UserEntity() {
}
public UUID getId() {
return id;
}
public String getEmail() {
return email;
}
public String getPasswordHash() {
return passwordHash;
}
public String getRole() {
return role;
}
public UserAccount toDomain() {
return new UserAccount(id, email, passwordHash, fullName, role, balance, createdAt, updatedAt);
}
public static UserEntity fromDomain(UserAccount user) {
UserEntity entity = new UserEntity();
entity.id = user.id();
entity.email = user.email();
entity.passwordHash = user.passwordHash();
entity.fullName = user.fullName();
entity.role = user.role();
entity.balance = user.balance();
entity.createdAt = user.createdAt();
entity.updatedAt = user.updatedAt();
return entity;
}
public void apply(UserAccount user) {
if (!id.equals(user.id())) {
throw new IllegalArgumentException("Cannot apply a different user account");
}
email = user.email();
passwordHash = user.passwordHash();
fullName = user.fullName();
role = user.role();
balance = user.balance();
createdAt = user.createdAt();
updatedAt = user.updatedAt();
}
}