Bläddra i källkod

invalid liip cache on file's config change

Olivier Massot 7 månader sedan
förälder
incheckning
ea066a14e2

+ 5 - 1
src/Entity/Core/File.php

@@ -7,6 +7,7 @@ namespace App\Entity\Core;
 use ApiPlatform\Metadata\ApiResource;
 use ApiPlatform\Metadata\Delete;
 use ApiPlatform\Metadata\Get;
+use ApiPlatform\Metadata\Patch;
 use ApiPlatform\Metadata\Post;
 use ApiPlatform\Metadata\Put;
 use App\Entity\AccessWish\DocumentWish;
@@ -27,6 +28,7 @@ use App\Enum\Core\FileTypeEnum;
 use App\Enum\Core\FileVisibilityEnum;
 // use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
 use App\Repository\Core\FileRepository;
+use App\State\Processor\Core\FileProcessor;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
 use Doctrine\ORM\Mapping as ORM;
@@ -44,9 +46,11 @@ use Symfony\Component\Serializer\Annotation\Groups;
     operations: [
         new Get(security: "is_granted('READ', object)"),
         new Put(security: "is_granted('EDIT', object)"),
+        new Patch(security: "is_granted('EDIT', object)"),
         new Post(security: "is_granted('CREATE', object)"),
         new Delete(security: "is_granted('DELETE', object)"),
-    ]
+    ],
+    processor: FileProcessor::class
 )]
 // #[Auditable]
 #[ORM\Entity(repositoryClass: FileRepository::class)]

+ 3 - 1
src/Entity/Organization/Organization.php

@@ -51,6 +51,7 @@ use App\Enum\Organization\TypeEstablishmentDetailEnum;
 use App\Enum\Organization\TypeEstablishmentEnum;
 use App\Repository\Organization\OrganizationRepository;
 // use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
+use App\State\Processor\Organization\OrganizationProcessor;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
 use Doctrine\ORM\Mapping as ORM;
@@ -66,7 +67,8 @@ use JetBrains\PhpStorm\Pure;
 #[ApiResource(
     operations: [
         new Get(security: 'object.getId() == user.getOrganization().getId()'),
-    ]
+    ],
+    processor: OrganizationProcessor::class,
 )]
 // #[Auditable]
 #[ORM\Entity(repositoryClass: OrganizationRepository::class)]

+ 39 - 0
src/Service/OnChange/Core/OnFileChange.php

@@ -0,0 +1,39 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Service\OnChange\Core;
+
+use App\Entity\Core\File;
+use App\Service\OnChange\OnChangeContext;
+use App\Service\OnChange\OnChangeDefault;
+use Liip\ImagineBundle\Imagine\Cache\CacheManager;
+
+/**
+ * Classe OnOrganizationChange qui comporte toutes les opérations automatiques se produisant lors de l'évolution d'une organisation.
+ */
+class OnFileChange extends OnChangeDefault
+{
+    public function __construct(
+        protected readonly CacheManager $cacheManager
+    ) {
+
+    }
+
+
+    public function beforeChange(mixed $file, OnChangeContext $context): void
+    {
+        if ($context->previousData() && $context->previousData()->getConfig() !== $file->getConfig()) {
+            $this->onConfigChange($file);
+        }
+    }
+
+    /**
+     * La configuration d'un fichier a changé (i.e. le cropping).
+     * On invalide le cache Liip.
+     */
+    public function onConfigChange(File $file): void
+    {
+        $this->cacheManager->remove($file->getSlug());
+    }
+}

+ 22 - 0
src/State/Processor/Core/FileProcessor.php

@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\State\Processor\Core;
+
+use App\Service\OnChange\Core\OnFileChange;
+use App\State\Processor\EntityProcessor;
+use JetBrains\PhpStorm\Pure;
+
+/**
+ * Classe OrganizationProcessor qui est un custom dataPersister gérant la resource Organization.
+ */
+class FileProcessor extends EntityProcessor
+{
+    #[Pure]
+    public function __construct(
+        OnFileChange $onChange,
+    ) {
+        parent::__construct($onChange);
+    }
+}