1 package fr.tiogars.chat.domains.task.services;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.stereotype.Service;
8 import org.springframework.transaction.annotation.Transactional;
9
10 import fr.tiogars.chat.domains.task.entities.TaskEntity;
11 import fr.tiogars.chat.domains.task.models.CreateTaskRequest;
12 import fr.tiogars.chat.domains.task.models.Task;
13 import fr.tiogars.chat.domains.task.repositories.TaskRepository;
14
15
16 @Service
17 public class TaskSeedService {
18
19 private final TaskRepository repository;
20
21 @Autowired
22 private TaskReferences references;
23
24 public TaskSeedService(TaskRepository repository) {
25 this.repository = repository;
26 }
27
28
29
30
31
32
33
34 @Transactional
35 public List<Task> seed(List<CreateTaskRequest> requests) {
36 List<Task> storedTemplates = new ArrayList<>();
37 for (CreateTaskRequest request : requests) {
38 TaskEntity entity = repository.findByCode(request.code())
39 .map(existing -> {
40 existing.update(request.label(), request.description());
41 return existing;
42 })
43 .orElseGet(() -> new TaskEntity(
44 request.code(), request.label(), request.description()));
45 entity.attributes(request.status(), request.priority(), request.dueDate(), request.assignedTo());
46 if (references != null) {
47 references.apply(entity, request.tagIds(), request.nomenclatureId());
48 }
49 storedTemplates.add(toRecord(repository.saveAndFlush(entity)));
50 }
51 return storedTemplates;
52 }
53
54 private static Task toRecord(TaskEntity entity) {
55 return new Task(
56 entity.getId(),
57 entity.getCode(),
58 entity.getLabel(),
59 entity.getDescription(),
60 entity.getCreatedDate(),
61 entity.getLastModifiedDate(),
62 entity.getCreatedBy(),
63 entity.getLastModifiedBy(),
64 entity.getStatus(), entity.getPriority(), entity.getDueDate(), entity.getAssignedTo(),
65 entity.getTagIds(), entity.getNomenclatureId());
66 }
67 }