Olivier Massot 4 лет назад
Родитель
Сommit
7fdfab5901

+ 17 - 2
src/ApiResources/Export/ExportRequest.php

@@ -14,13 +14,20 @@ use Symfony\Component\Validator\Constraints as Assert;
  */
 abstract class ExportRequest
 {
-    const SUPPORTED_FORMATS = ['pdf', 'xlsx', 'txt', 'csv'];
+    /**
+     * Id 'bidon' ajouté par défaut pour permettre la construction
+     * de l'IRI par api platform
+     *
+     * @var int
+     */
+    #[ApiProperty(identifier: true)]
+    protected int $id = 0;
 
     /**
      * Format de sortie attendu (pdf, txt...)
      * @var string
      */
-    #[Assert\Choice(self::SUPPORTED_FORMATS)]
+    #[Assert\Choice(callback: ['\App\Enum\Export\ExportFormatEnum', 'toArray'], message: 'invalid-output-format')]
     protected string $format;
 
     /**
@@ -29,6 +36,14 @@ abstract class ExportRequest
      */
     protected Access $requester;
 
+    /**
+     * @return int
+     */
+    public function getId(): int
+    {
+        return $this->id;
+    }
+
     /**
      * @return string
      */

+ 4 - 29
src/ApiResources/Export/LicenceCmf/LicenceCmfOrganizationER.php

@@ -2,15 +2,15 @@
 
 namespace App\ApiResources\Export\LicenceCmf;
 
-use ApiPlatform\Core\Annotation\ApiProperty;
 use ApiPlatform\Core\Annotation\ApiResource;
 use App\ApiResources\Export\ExportRequest;
+use App\Service\Export\LicenceCmfExporter;
 use Symfony\Component\Validator\Constraints as Assert;
 
 /**
  * Requête d'export d'une licence CMF pour l'organization ciblée
  *
- * Appeler avec une requête POST à /export/licencecmf/organization,
+ * Appeler avec une requête POST à /export/licence-cmf/organization,
  * avec un body comme :
  *
  *   {"organizationId" : 1}
@@ -19,42 +19,17 @@ use Symfony\Component\Validator\Constraints as Assert;
     collectionOperations: [
         'post' => [
             'method' => 'POST',
-            'path' => '/licencecmf/organization'
+            'path' => '/licence-cmf/organization',
         ],
     ],
     routePrefix: '/export'
 )]
 class LicenceCmfOrganizationER extends ExportRequest
 {
-    const SUPPORTED_FORMATS = ['pdf'];
-
-    /**
-     * Id de l'organization pour laquelle on exporte la licence
-     * @var int | null
-     */
-    #[ApiProperty(identifier: true)]
-    protected ?int $organizationId = null;
-
     /**
      * Format de sortie attendu (pdf seulement ici)
      * @var string
      */
-    #[Assert\Choice(self::SUPPORTED_FORMATS)]
+    #[Assert\EqualTo('pdf')]
     protected string $format = 'pdf';
-
-    /**
-     * @return int|null
-     */
-    public function getOrganizationId(): ?int
-    {
-        return $this->organizationId;
-    }
-
-    /**
-     * @param int|null $organizationId
-     */
-    public function setOrganizationId(?int $organizationId): void
-    {
-        $this->organizationId = $organizationId;
-    }
 }

+ 3 - 3
src/DataPersister/Export/LicenceCmf/LicenceCmfOrganizationERDataPersister.php

@@ -6,7 +6,6 @@ use ApiPlatform\Core\DataPersister\ContextAwareDataPersisterInterface;
 use App\ApiResources\Export\LicenceCmf\LicenceCmfOrganizationER;
 use App\Entity\Access\Access;
 use App\Service\Export\LicenceCmfExporter;
-use HttpRequestException;
 use Symfony\Component\Security\Core\Security;
 
 class LicenceCmfOrganizationERDataPersister implements ContextAwareDataPersisterInterface
@@ -31,14 +30,15 @@ class LicenceCmfOrganizationERDataPersister implements ContextAwareDataPersister
         $access = $this->security->getUser();
 
         $licenceCmfExportRequest->setRequester($access);
+
         $this->licenceCmfExporter->export($licenceCmfExportRequest);
     }
 
     /**
-     * @throws HttpRequestException
+     * @throws \Exception
      */
     public function remove($data, array $context = [])
     {
-        throw new HttpRequestException('not implemented error', 500);
+        throw new \Exception('not supported', 500);
     }
 }

+ 0 - 8
src/DataProvider/Export/LicenceCmfDataProvider.php

@@ -1,8 +0,0 @@
-<?php
-
-namespace App\DataProvider\Export;
-
-class LicenceCmfDataProvider
-{
-
-}

+ 17 - 0
src/Enum/Export/ExportFormatEnum.php

@@ -0,0 +1,17 @@
+<?php
+declare(strict_types=1);
+
+namespace App\Enum\Export;
+
+use MyCLabs\Enum\Enum;
+
+/**
+ * Formats de sortie des fichiers exportés
+ */
+class ExportFormatEnum extends Enum
+{
+    private const PDF ='pdf';
+    private const CSV ='csv';
+    private const TXT = 'txt';
+    private const XLSX = 'xlsx';
+}

+ 0 - 2
src/Service/Export/BaseExporter.php

@@ -2,8 +2,6 @@
 
 namespace App\Service\Export;
 
-use App\ApiResources\Export\ExportRequest;
-
 abstract class BaseExporter
 {
     protected function export($exportRequest) {}

+ 1 - 1
src/Service/Export/Encoder/PdfEncoder.php

@@ -55,7 +55,7 @@ class PdfEncoder
     /**
      * Encode the given HTML content into PDF,
      * write it into a file at the given location,
-     * and returns a File entity
+     * and returns the file path
      *
      * @param string $html
      * @param string $path

+ 2 - 18
src/Service/Export/LicenceCmfExporter.php

@@ -3,15 +3,13 @@
 namespace App\Service\Export;
 
 
-use App\Entity\Core\File;
-use App\Entity\Export\LicenceCmf;
+use App\Service\Export\Model\LicenceCmf;
 use App\Enum\Access\FunctionEnum;
 use App\Repository\Access\AccessRepository;
 use App\Repository\Organization\OrganizationRepository;
 use App\Service\Export\Encoder\PdfEncoder;
 use App\Service\Storage\TemporaryFileStorage;
 use App\Service\Utils\Path;
-use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
 use Twig\Environment;
 
 /**
@@ -31,7 +29,6 @@ class LicenceCmfExporter extends BaseExporter
         private OrganizationRepository $organizationRepository,
         private AccessRepository $accessRepository,
         private Environment $twig,
-        private UrlGeneratorInterface $router,
         private PdfEncoder $pdfEncoder
     )
     {}
@@ -41,7 +38,7 @@ class LicenceCmfExporter extends BaseExporter
      */
     public function export($exportRequest)
     {
-        $organization = $this->organizationRepository->find($exportRequest->getOrganizationId());
+        $organization = $exportRequest->getRequester()->getOrganization();
         $currentYear = date('Y');
 
         $model = new LicenceCmf();
@@ -94,25 +91,12 @@ class LicenceCmfExporter extends BaseExporter
         $tempDir = TemporaryFileStorage::makeStorageDirFor($organization->getId());
         $tempPath = Path::join($tempDir, $filename);
 
-//        $file = new File();
-//        $file->setOrganization($organization);
-//        $file->setPath($location);
-//        $file->setSlug($location);
-//        $file->setName(basename($location));
-//        $file->setMimeType('application/pdf');
-//        $file->setVisibility('NOBODY');
-//        $file->setFolder('DOCUMENTS');
-//        $file->setType($model::TYPE);
-//        $file->setCreateDate(new \DateTime());
-//        $file->setCreatedBy($exportRequest->getRequester()->getId());
-
         if (file_exists($tempPath)) {
             unlink($tempPath);
         }
 
         $this->pdfEncoder->encodeToFile($html, $tempPath);
 
-        return $tempPath;
     }
 
     /**

+ 1 - 1
src/Entity/Export/LicenceCmf.php → src/Service/Export/Model/LicenceCmf.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Entity\Export;
+namespace App\Service\Export\Model;
 
 class LicenceCmf
 {