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
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
28
29
30
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 }