View Javadoc
1   package fr.tiogars.inception.domains.domaintemplate.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.inception.domains.domaintemplate.entities.DomainTemplateEntity;
11  import fr.tiogars.inception.domains.domaintemplate.models.CreateDomainTemplateRequest;
12  import fr.tiogars.inception.domains.domaintemplate.models.DomainTemplate;
13  import fr.tiogars.inception.domains.domaintemplate.repositories.DomainTemplateRepository;
14  
15  /** Creates or updates DomainTemplates from seed data. */
16  @Service
17  public class DomainTemplateSeedService {
18  
19      private final DomainTemplateRepository repository;
20  
21      @Autowired
22      public DomainTemplateSeedService(DomainTemplateRepository repository) {
23          this.repository = repository;
24      }
25  
26      /**
27       * Creates or updates templates by immutable business code.
28       *
29       * @param requests business data to seed
30       * @return stored templates in input order
31       */
32      @Transactional
33      public List<DomainTemplate> seed(List<CreateDomainTemplateRequest> requests) {
34          List<DomainTemplate> storedTemplates = new ArrayList<>();
35          for (CreateDomainTemplateRequest request : requests) {
36              DomainTemplateEntity entity = repository.findByCode(request.code())
37                      .map(existing -> {
38                          existing.update(request.label(), request.description());
39                          return existing;
40                      })
41                      .orElseGet(() -> new DomainTemplateEntity(
42                              request.code(), request.label(), request.description()));
43              storedTemplates.add(toRecord(repository.saveAndFlush(entity)));
44          }
45          return storedTemplates;
46      }
47  
48      private static DomainTemplate toRecord(DomainTemplateEntity entity) {
49          return new DomainTemplate(
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      }
59  }