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