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.CreateTaskRequest;
11 import fr.tiogars.chat.domains.task.models.Task;
12 import fr.tiogars.chat.domains.task.repositories.TaskRepository;
13
14
15
16
17
18
19 @Service
20 public class TaskCreateService {
21
22 private final TaskRepository repository;
23
24 @Autowired
25 private TaskReferences references;
26
27
28
29
30
31
32 @Autowired
33 public TaskCreateService(TaskRepository repository) {
34 this.repository = repository;
35 }
36
37
38
39
40
41
42
43 @Transactional
44 public Optional<Task> create(CreateTaskRequest request) {
45 if (repository.findByCode(request.code()).isPresent()) {
46 return Optional.empty();
47 }
48 TaskEntity entity = new TaskEntity(
49 request.code(), request.label(), request.description());
50 entity.attributes(request.status(), request.priority(), request.dueDate(), request.assignedTo());
51 if (references != null) {
52 references.apply(entity, request.tagIds(), request.nomenclatureId());
53 }
54 return Optional.of(toRecord(repository.saveAndFlush(entity)));
55 }
56
57 private static Task toRecord(TaskEntity entity) {
58 return new Task(
59 entity.getId(),
60 entity.getCode(),
61 entity.getLabel(),
62 entity.getDescription(),
63 entity.getCreatedDate(),
64 entity.getLastModifiedDate(),
65 entity.getCreatedBy(),
66 entity.getLastModifiedBy(),
67 entity.getStatus(), entity.getPriority(), entity.getDueDate(), entity.getAssignedTo(),
68 entity.getTagIds(), entity.getNomenclatureId());
69 }
70 }