TaskEntity.java
package fr.tiogars.chat.domains.task.entities;
import java.time.Instant;
import org.hibernate.annotations.SQLRestriction;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.Version;
/** Persists a Task business object. */
@Entity
@Table(name = "tasks")
@EntityListeners(AuditingEntityListener.class)
@SQLRestriction("deleted_date IS NULL")
public class TaskEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, updatable = false)
private String code;
@Column(nullable = false)
private String label;
private String description;
@jakarta.persistence.Enumerated(jakarta.persistence.EnumType.STRING)
@Column(nullable = false)
private fr.tiogars.chat.domains.task.models.TaskStatus status =
fr.tiogars.chat.domains.task.models.TaskStatus.TODO;
@jakarta.persistence.Enumerated(jakarta.persistence.EnumType.STRING)
@Column(nullable = false)
private fr.tiogars.chat.domains.task.models.TaskPriority priority =
fr.tiogars.chat.domains.task.models.TaskPriority.NORMAL;
private java.time.LocalDate dueDate;
private String assignedTo;
@jakarta.persistence.ManyToMany
@jakarta.persistence.JoinTable(name = "task_tags",
joinColumns = @jakarta.persistence.JoinColumn(name = "task_id"),
inverseJoinColumns = @jakarta.persistence.JoinColumn(name = "tag_id"))
private java.util.List<fr.tiogars.chat.domains.tag.entities.TagEntity> tags = new java.util.ArrayList<>();
@jakarta.persistence.ManyToOne(fetch = jakarta.persistence.FetchType.LAZY)
private fr.tiogars.chat.domains.nomenclature.entities.NomenclatureEntity nomenclature;
public void attributes(fr.tiogars.chat.domains.task.models.TaskStatus status,
fr.tiogars.chat.domains.task.models.TaskPriority priority,
java.time.LocalDate dueDate, String assignedTo) {
this.status = status;
this.priority = priority;
this.dueDate = dueDate;
this.assignedTo = assignedTo;
}
public void references(java.util.List<fr.tiogars.chat.domains.tag.entities.TagEntity> tags,
fr.tiogars.chat.domains.nomenclature.entities.NomenclatureEntity nomenclature) {
this.tags = new java.util.ArrayList<>(tags);
this.nomenclature = nomenclature;
}
public fr.tiogars.chat.domains.task.models.TaskStatus getStatus() {
return status;
}
public fr.tiogars.chat.domains.task.models.TaskPriority getPriority() {
return priority;
}
public java.time.LocalDate getDueDate() {
return dueDate;
}
public String getAssignedTo() {
return assignedTo;
}
public java.util.List<Long> getTagIds() {
return tags.stream().map(fr.tiogars.chat.domains.tag.entities.TagEntity::getId).sorted().toList();
}
public Long getNomenclatureId() {
return nomenclature == null ? null : nomenclature.getId();
}
@CreatedDate
@Column(nullable = false, updatable = false)
private Instant createdDate;
@LastModifiedDate
@Column(nullable = false)
private Instant lastModifiedDate;
@CreatedBy
@Column(nullable = false, updatable = false)
private String createdBy;
@LastModifiedBy
@Column(nullable = false)
private String lastModifiedBy;
private Instant deletedDate;
private String deletedBy;
@Version
@Column(nullable = false)
private long version;
protected TaskEntity() {
// required by JPA
}
public TaskEntity(String code, String label, String description) {
this.code = code;
this.label = label;
this.description = description;
}
public void update(String label, String description) {
this.label = label;
this.description = description;
}
public void softDelete(Instant deletedDate, String deletedBy) {
this.deletedDate = java.util.Objects.requireNonNull(deletedDate);
this.deletedBy = java.util.Objects.requireNonNull(deletedBy);
}
public Long getId() {
return id;
}
public String getCode() {
return code;
}
public String getLabel() {
return label;
}
public String getDescription() {
return description;
}
public Instant getCreatedDate() {
return createdDate;
}
public Instant getLastModifiedDate() {
return lastModifiedDate;
}
public String getCreatedBy() {
return createdBy;
}
public String getLastModifiedBy() {
return lastModifiedBy;
}
public Instant getDeletedDate() {
return deletedDate;
}
public String getDeletedBy() {
return deletedBy;
}
}