SkillEntity.java

package fr.avenirsesr.portfolio.api.infrastructure.adapter.model;

import jakarta.persistence.*;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Entity
@Table(name = "skill")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class SkillEntity extends AvenirsBaseEntity {
  @OneToMany(mappedBy = "skill", cascade = CascadeType.ALL, orphanRemoval = true)
  private Set<SkillLevelEntity> skillLevels;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "program_progress_id")
  private ProgramProgressEntity programProgress;

  @OneToMany(
      mappedBy = "skill",
      cascade = CascadeType.ALL,
      orphanRemoval = true,
      fetch = FetchType.LAZY)
  private Set<SkillTranslationEntity> translations =
      new HashSet<>(); // TODO: Remove this SET and get it in queries

  public SkillEntity(
      UUID id, Set<SkillLevelEntity> skillLevels, ProgramProgressEntity programProgress) {
    this.setId(id);
    this.skillLevels = skillLevels;
    this.programProgress = programProgress;
  }

  @Override
  public String toString() {
    return "SkillEntity[%s]".formatted(this.getId());
  }
}