TraceEntity.java
package fr.avenirsesr.portfolio.api.infrastructure.adapter.model;
import fr.avenirsesr.portfolio.api.domain.model.enums.ELanguage;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import java.time.Instant;
import java.util.List;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
@Entity
@Table(name = "trace")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class TraceEntity extends AvenirsBaseEntity {
@ManyToOne(optional = false)
private UserEntity user;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private ELanguage language;
@ManyToMany
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinTable(
name = "trace_skill_level",
joinColumns = @JoinColumn(name = "trace_id"),
inverseJoinColumns = @JoinColumn(name = "skill_level_id"))
private List<SkillLevelEntity> skillLevels;
@ManyToMany
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinTable(
name = "trace_ams",
joinColumns = @JoinColumn(name = "trace_id"),
inverseJoinColumns = @JoinColumn(name = "ams_id"))
private List<AMSEntity> amses;
@Column(nullable = false)
private boolean isGroup;
@Column private Instant deletedAt;
public TraceEntity(
UUID id,
UserEntity user,
String title,
ELanguage language,
List<SkillLevelEntity> skillLevels,
List<AMSEntity> amses,
boolean isGroup,
Instant createdAt,
Instant updatedAt,
Instant deletedAt) {
this.setId(id);
this.user = user;
this.title = title;
this.language = language;
this.skillLevels = skillLevels;
this.amses = amses;
this.isGroup = isGroup;
this.setCreatedAt(createdAt);
this.setUpdatedAt(updatedAt);
this.setDeletedAt(deletedAt);
}
}