View Javadoc
1   package fr.tiogars.inception.domains.domaintemplate.services;
2   
3   import java.time.Clock;
4   import java.time.Instant;
5   import java.time.temporal.ChronoUnit;
6   
7   import org.springframework.beans.factory.annotation.Autowired;
8   import org.springframework.stereotype.Service;
9   import org.springframework.transaction.annotation.Transactional;
10  
11  import fr.tiogars.inception.config.SecurityAuditorAware;
12  import fr.tiogars.inception.domains.domaintemplate.repositories.DomainTemplateRepository;
13  
14  /** Archives DomainTemplates without removing their database rows. */
15  @Service
16  public class DomainTemplateDeleteService {
17  
18      private final DomainTemplateRepository repository;
19      private final SecurityAuditorAware auditor;
20      private final Clock clock;
21  
22      @Autowired
23      public DomainTemplateDeleteService(DomainTemplateRepository repository, SecurityAuditorAware auditor, Clock clock) {
24          this.repository = repository;
25          this.auditor = auditor;
26          this.clock = clock;
27      }
28  
29      /**
30       * Soft-deletes an active DomainTemplate.
31       *
32       * @param id persistent identifier
33       * @return {@code true} when the template existed
34       */
35      @Transactional
36      public boolean delete(Long id) {
37          return repository.findById(id).map(entity -> {
38              entity.softDelete(Instant.now(clock).truncatedTo(ChronoUnit.MICROS),
39                      auditor.getCurrentAuditor().orElseThrow());
40              repository.saveAndFlush(entity);
41              return true;
42          }).orElse(false);
43      }
44  }