generate document with relatorio: config and driver

This commit is contained in:
2021-12-02 17:00:09 +01:00
parent 475b40e896
commit 2245f83631
7 changed files with 177 additions and 74 deletions

View File

@@ -0,0 +1,73 @@
<?php
namespace Chill\DocGeneratorBundle\GeneratorDriver;
use Nelmio\Alice\ParameterBag;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpClient\Exception\TransportException;
use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\Multipart\FormDataPart;
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\HttpExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class RelatorioDriver implements DriverInterface
{
private LoggerInterface $logger;
private HttpClientInterface $relatorioClient;
private string $url;
public function __construct(
HttpClientInterface $relatorioClient,
ParameterBagInterface $parameterBag,
LoggerInterface $logger
) {
$this->relatorioClient = $relatorioClient;
$this->logger = $logger;
$this->url = $parameterBag->get('chill_doc_generator')['driver']['relatorio']['url'];
}
public function generateFromResource($template, string $resourceType, array $data, string $templateName = null)
{
$formFields = [
'variables' => \json_encode($data),
'template' => new DataPart($template, $templateName ?? uniqid('template_'), $resourceType),
];
$form = new FormDataPart($formFields);
try {
$response = $this->relatorioClient->request('POST', $this->url, [
'headers' => $form->getPreparedHeaders()->toArray(),
'body' => $form->bodyToIterable(),
]);
return $response->toStream();
} catch (HttpExceptionInterface $e) {
$this->logger->error("relatorio: error while generating document", [
'msg' => $e->getMessage(),
'response' => $e->getResponse()->getStatusCode(),
'content' => $e->getResponse()->getContent(false),
]);
throw $e;
} catch (TransportExceptionInterface $e) {
$this->logger->error("relatorio: transport exception", [
'msg' => $e->getMessage(),
'e' => $e->getTraceAsString(),
]);
throw $e;
} catch (DecodingExceptionInterface $e) {
$this->logger->error("relatorio: could not decode response", [
'msg' => $e->getMessage(),
'e' => $e->getTraceAsString(),
]);
throw $e;
}
}
}