View Javadoc
1   package fr.tiogars.inception.domains.domaintemplate.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.inception.domains.domaintemplate.entities.DomainTemplateEntity;
10  import fr.tiogars.inception.domains.domaintemplate.models.CreateDomainTemplateRequest;
11  import fr.tiogars.inception.domains.domaintemplate.models.DomainTemplate;
12  import fr.tiogars.inception.domains.domaintemplate.repositories.DomainTemplateRepository;
13  
14  /**
15   * Creates DomainTemplates when their business code is available.
16   *
17   * @since 0.1.0
18   */
19  @Service
20  public class DomainTemplateCreateService {
21  
22      private final DomainTemplateRepository repository;
23  
24      /**
25       * Creates a service using Spring Data auditing.
26       *
27       * @param repository domain record repository
28       */
29      @Autowired
30      public DomainTemplateCreateService(DomainTemplateRepository repository) {
31          this.repository = repository;
32      }
33  
34      /**
35       * Creates a DomainTemplate when its code does not already exist.
36       *
37       * @param request business data to create
38       * @return created template, or an empty optional when the code exists
39       */
40      @Transactional
41      public Optional<DomainTemplate> create(CreateDomainTemplateRequest request) {
42          if (repository.findByCode(request.code()).isPresent()) {
43              return Optional.empty();
44          }
45          DomainTemplateEntity entity = new DomainTemplateEntity(
46                  request.code(), request.label(), request.description());
47          return Optional.of(toRecord(repository.saveAndFlush(entity)));
48      }
49  
50      private static DomainTemplate toRecord(DomainTemplateEntity entity) {
51          return new DomainTemplate(
52                  entity.getId(),
53                  entity.getCode(),
54                  entity.getLabel(),
55                  entity.getDescription(),
56                  entity.getCreatedDate(),
57                  entity.getLastModifiedDate(),
58                  entity.getCreatedBy(),
59                  entity.getLastModifiedBy());
60      }
61  }