1 package fr.tiogars.chat.domains.task.services;
2
3 import java.io.IOException;
4 import java.util.List;
5 import java.util.Optional;
6
7 import org.springframework.stereotype.Service;
8 import org.springframework.transaction.annotation.Transactional;
9
10 import fr.tiogars.chat.domains.task.models.Task;
11 import fr.tiogars.chat.domains.task.repositories.TaskRepository;
12
13
14 @Service
15 public class TasksPrintSelectedService {
16
17 private final TaskRepository repository;
18 private final TaskPdfRenderer renderer;
19
20 public TasksPrintSelectedService(TaskRepository repository, TaskPdfRenderer renderer) {
21 this.repository = repository;
22 this.renderer = renderer;
23 }
24
25
26
27
28
29
30
31
32 @Transactional(readOnly = true)
33 public Optional<byte[]> printSelected(List<Long> ids) throws IOException {
34 if (ids.isEmpty()) {
35 throw new IllegalArgumentException("Select at least one Task to print.");
36 }
37 List<Long> uniqueIds = ids.stream().distinct().toList();
38 List<Task> templates = repository.findAllByIdInOrderByCodeAsc(uniqueIds).stream()
39 .map(TaskFindAllService::toRecord)
40 .toList();
41 if (templates.size() != uniqueIds.size()) {
42 return Optional.empty();
43 }
44 return Optional.of(renderer.render("Selected Tasks", templates));
45 }
46 }