EpisodeEntity.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.Episode;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.Table;

@Entity
@Table(name = "episodes")
public class EpisodeEntity {

	@Id
	private Integer id;

	@Column(nullable = false)
	private String name;

	@Column(name = "air_date", nullable = false)
	private String airDate;

	@Column(name = "episode", nullable = false)
	private String code;

	@ManyToMany(mappedBy = "episodes")
	private Set<CharacterEntity> characters = new LinkedHashSet<>();

	protected EpisodeEntity() {
	}

	public EpisodeEntity(Integer id, String name, String airDate, String code) {
		this.id = id;
		this.name = name;
		this.airDate = airDate;
		this.code = code;
	}

	public Integer getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public String getAirDate() {
		return airDate;
	}

	public String getCode() {
		return code;
	}

	public Set<CharacterEntity> getCharacters() {
		return characters;
	}

	public Episode toDomain() {
		List<Integer> characterIds = characters.stream()
				.map(CharacterEntity::getId)
				.sorted()
				.toList();
		return new Episode(id, name, airDate, code, characterIds);
	}

}