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
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
30
31
32
33
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 }