View Javadoc
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  /** Persists a Task business object. */
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         // required by JPA
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 }