DomainTemplatePrintService.java

package fr.tiogars.inception.domains.domaintemplate.services;

import java.io.IOException;
import java.util.List;
import java.util.Optional;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import fr.tiogars.inception.domains.domaintemplate.models.DomainTemplate;

/** Generates a printable PDF for one active DomainTemplate. */
@Service
public class DomainTemplatePrintService {

    private final DomainTemplateFindByIdService findByIdService;
    private final DomainTemplatePdfRenderer renderer;

    public DomainTemplatePrintService(DomainTemplateFindByIdService findByIdService, DomainTemplatePdfRenderer renderer) {
        this.findByIdService = findByIdService;
        this.renderer = renderer;
    }

    /**
     * Prints an active record.
     *
     * @param id persistent identifier
     * @return PDF bytes, or empty if the record was not found
     * @throws IOException when the PDF cannot be generated
     */
    @Transactional(readOnly = true)
    public Optional<byte[]> print(Long id) throws IOException {
        Optional<DomainTemplate> template = findByIdService.findById(id);
        if (template.isEmpty()) {
            return Optional.empty();
        }
        return Optional.of(renderer.render("DomainTemplate", List.of(template.get())));
    }
}