View Javadoc
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  /** Creates or updates Tasks from seed data. */
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       * Creates or updates templates by immutable business code.
30       *
31       * @param requests business data to seed
32       * @return stored templates in input order
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  }