View Javadoc
1   package fr.tiogars.chat.domains.task.services;
2   
3   import java.util.Optional;
4   
5   import org.springframework.beans.factory.annotation.Autowired;
6   import org.springframework.stereotype.Service;
7   import org.springframework.transaction.annotation.Transactional;
8   
9   import fr.tiogars.chat.domains.task.entities.TaskEntity;
10  import fr.tiogars.chat.domains.task.models.Task;
11  import fr.tiogars.chat.domains.task.models.UpdateTaskRequest;
12  import fr.tiogars.chat.domains.task.repositories.TaskRepository;
13  
14  /** Updates existing Tasks. */
15  @Service
16  public class TaskUpdateService {
17  
18      private final TaskRepository repository;
19  
20      @Autowired
21      private TaskReferences references;
22  
23      @Autowired
24      public TaskUpdateService(TaskRepository repository) {
25          this.repository = repository;
26      }
27  
28      /**
29       * Updates the mutable fields of a Task.
30       *
31       * @param id      persistent identifier
32       * @param request replacement business data
33       * @return updated template, or an empty optional when it does not exist
34       */
35      @Transactional
36      public Optional<Task> update(Long id, UpdateTaskRequest request) {
37          return repository.findById(id)
38                  .map(existing -> {
39                      existing.update(request.label(), request.description());
40                      existing.attributes(request.status(), request.priority(), request.dueDate(), request.assignedTo());
41                      if (references != null) {
42                          references.apply(existing, request.tagIds(), request.nomenclatureId());
43                      }
44                      return toRecord(repository.saveAndFlush(existing));
45                  });
46      }
47  
48      private static Task toRecord(TaskEntity entity) {
49          return new Task(
50                  entity.getId(),
51                  entity.getCode(),
52                  entity.getLabel(),
53                  entity.getDescription(),
54                  entity.getCreatedDate(),
55                  entity.getLastModifiedDate(),
56                  entity.getCreatedBy(),
57                  entity.getLastModifiedBy(),
58                  entity.getStatus(), entity.getPriority(), entity.getDueDate(), entity.getAssignedTo(),
59                  entity.getTagIds(), entity.getNomenclatureId());
60      }
61  }