ProgramEntity.java

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

import fr.avenirsesr.portfolio.api.domain.model.enums.EDurationUnit;
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 = "program")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class ProgramEntity extends AvenirsBaseEntity {
  @Column(name = "is_apc", nullable = false)
  private boolean isAPC;

  @Column(name = "duration_unit", nullable = true)
  private EDurationUnit durationUnit;

  @Column(name = "duration_count", nullable = true)
  private int durationCount;

  @ManyToOne(optional = false)
  private InstitutionEntity institution;

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

  public ProgramEntity(
      UUID id,
      boolean isAPC,
      InstitutionEntity institution,
      EDurationUnit durationUnit,
      int durationCount) {
    this.setId(id);
    this.institution = institution;
    this.isAPC = isAPC;
    this.durationUnit = durationUnit;
    this.durationCount = durationCount;
  }
}