1 package fr.tiogars.chat.domains.task.entities;
2
3 import java.time.Instant;
4
5 import org.hibernate.annotations.SQLRestriction;
6 import org.springframework.data.annotation.CreatedBy;
7 import org.springframework.data.annotation.CreatedDate;
8 import org.springframework.data.annotation.LastModifiedBy;
9 import org.springframework.data.annotation.LastModifiedDate;
10 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
11
12 import jakarta.persistence.Column;
13 import jakarta.persistence.Entity;
14 import jakarta.persistence.EntityListeners;
15 import jakarta.persistence.GeneratedValue;
16 import jakarta.persistence.GenerationType;
17 import jakarta.persistence.Id;
18 import jakarta.persistence.Table;
19 import jakarta.persistence.Version;
20
21
22 @Entity
23 @Table(name = "tasks")
24 @EntityListeners(AuditingEntityListener.class)
25 @SQLRestriction("deleted_date IS NULL")
26 public class TaskEntity {
27
28 @Id
29 @GeneratedValue(strategy = GenerationType.IDENTITY)
30 private Long id;
31
32 @Column(nullable = false, updatable = false)
33 private String code;
34
35 @Column(nullable = false)
36 private String label;
37
38 private String description;
39
40 @jakarta.persistence.Enumerated(jakarta.persistence.EnumType.STRING)
41 @Column(nullable = false)
42 private fr.tiogars.chat.domains.task.models.TaskStatus status =
43 fr.tiogars.chat.domains.task.models.TaskStatus.TODO;
44
45 @jakarta.persistence.Enumerated(jakarta.persistence.EnumType.STRING)
46 @Column(nullable = false)
47 private fr.tiogars.chat.domains.task.models.TaskPriority priority =
48 fr.tiogars.chat.domains.task.models.TaskPriority.NORMAL;
49
50 private java.time.LocalDate dueDate;
51
52 private String assignedTo;
53
54 @jakarta.persistence.ManyToMany
55 @jakarta.persistence.JoinTable(name = "task_tags",
56 joinColumns = @jakarta.persistence.JoinColumn(name = "task_id"),
57 inverseJoinColumns = @jakarta.persistence.JoinColumn(name = "tag_id"))
58 private java.util.List<fr.tiogars.chat.domains.tag.entities.TagEntity> tags = new java.util.ArrayList<>();
59
60 @jakarta.persistence.ManyToOne(fetch = jakarta.persistence.FetchType.LAZY)
61 private fr.tiogars.chat.domains.nomenclature.entities.NomenclatureEntity nomenclature;
62
63 public void attributes(fr.tiogars.chat.domains.task.models.TaskStatus status,
64 fr.tiogars.chat.domains.task.models.TaskPriority priority,
65 java.time.LocalDate dueDate, String assignedTo) {
66 this.status = status;
67 this.priority = priority;
68 this.dueDate = dueDate;
69 this.assignedTo = assignedTo;
70 }
71
72 public void references(java.util.List<fr.tiogars.chat.domains.tag.entities.TagEntity> tags,
73 fr.tiogars.chat.domains.nomenclature.entities.NomenclatureEntity nomenclature) {
74 this.tags = new java.util.ArrayList<>(tags);
75 this.nomenclature = nomenclature;
76 }
77
78 public fr.tiogars.chat.domains.task.models.TaskStatus getStatus() {
79 return status;
80 }
81
82 public fr.tiogars.chat.domains.task.models.TaskPriority getPriority() {
83 return priority;
84 }
85
86 public java.time.LocalDate getDueDate() {
87 return dueDate;
88 }
89
90 public String getAssignedTo() {
91 return assignedTo;
92 }
93
94 public java.util.List<Long> getTagIds() {
95 return tags.stream().map(fr.tiogars.chat.domains.tag.entities.TagEntity::getId).sorted().toList();
96 }
97
98 public Long getNomenclatureId() {
99 return nomenclature == null ? null : nomenclature.getId();
100 }
101
102 @CreatedDate
103 @Column(nullable = false, updatable = false)
104 private Instant createdDate;
105
106 @LastModifiedDate
107 @Column(nullable = false)
108 private Instant lastModifiedDate;
109
110 @CreatedBy
111 @Column(nullable = false, updatable = false)
112 private String createdBy;
113
114 @LastModifiedBy
115 @Column(nullable = false)
116 private String lastModifiedBy;
117
118 private Instant deletedDate;
119
120 private String deletedBy;
121
122 @Version
123 @Column(nullable = false)
124 private long version;
125
126 protected TaskEntity() {
127
128 }
129
130 public TaskEntity(String code, String label, String description) {
131 this.code = code;
132 this.label = label;
133 this.description = description;
134 }
135
136 public void update(String label, String description) {
137 this.label = label;
138 this.description = description;
139 }
140
141 public void softDelete(Instant deletedDate, String deletedBy) {
142 this.deletedDate = java.util.Objects.requireNonNull(deletedDate);
143 this.deletedBy = java.util.Objects.requireNonNull(deletedBy);
144 }
145
146 public Long getId() {
147 return id;
148 }
149
150 public String getCode() {
151 return code;
152 }
153
154 public String getLabel() {
155 return label;
156 }
157
158 public String getDescription() {
159 return description;
160 }
161
162 public Instant getCreatedDate() {
163 return createdDate;
164 }
165
166 public Instant getLastModifiedDate() {
167 return lastModifiedDate;
168 }
169
170 public String getCreatedBy() {
171 return createdBy;
172 }
173
174 public String getLastModifiedBy() {
175 return lastModifiedBy;
176 }
177
178 public Instant getDeletedDate() {
179 return deletedDate;
180 }
181
182 public String getDeletedBy() {
183 return deletedBy;
184 }
185 }