LocationEntity.java
package cl.prgm.portaltrip.infrastructure.persistence;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import cl.prgm.portaltrip.domain.model.Location;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.Table;
@Entity
@Table(name = "locations")
public class LocationEntity {
@Id
private Integer id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String type;
@Column(nullable = false)
private String dimension;
@ManyToMany
@JoinTable(
name = "location_residents",
joinColumns = @JoinColumn(name = "location_id"),
inverseJoinColumns = @JoinColumn(name = "character_id"))
private Set<CharacterEntity> residents = new LinkedHashSet<>();
protected LocationEntity() {
}
public LocationEntity(Integer id, String name, String type, String dimension) {
this.id = id;
this.name = name;
this.type = type;
this.dimension = dimension;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public String getType() {
return type;
}
public String getDimension() {
return dimension;
}
public Set<CharacterEntity> getResidents() {
return residents;
}
public Location toDomain() {
List<Integer> residentIds = residents.stream()
.map(CharacterEntity::getId)
.sorted()
.toList();
return new Location(id, name, type, dimension, residentIds);
}
}