From e609d8eb25582bdcf6b4b0ef2f9dd24bfeabbcb9 Mon Sep 17 00:00:00 2001
From: Alan Poulain <contact@alanpoulain.eu>
Date: Sat, 8 Mar 2025 14:36:48 +0100
Subject: [PATCH] feat(metadata): reduce ApiFilter service id

---
 src/Metadata/Util/AttributeFilterExtractorTrait.php         | 6 +++++-
 .../TestBundle/ApiResource/Issue5648/DummyResource.php      | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/Metadata/Util/AttributeFilterExtractorTrait.php b/src/Metadata/Util/AttributeFilterExtractorTrait.php
index fc29ff832f6..ab03578995d 100644
--- a/src/Metadata/Util/AttributeFilterExtractorTrait.php
+++ b/src/Metadata/Util/AttributeFilterExtractorTrait.php
@@ -133,7 +133,11 @@ private function readFilterAttributes(\ReflectionClass $reflectionClass): array
     private function generateFilterId(\ReflectionClass $reflectionClass, string $filterClass, ?string $filterId = null): string
     {
         $suffix = null !== $filterId ? '_'.$filterId : $filterId;
+        $filterClassName = (new \ReflectionClass($filterClass))->getName();
+        if (null !== $suffix) {
+            $filterClassName = '';
+        }
 
-        return 'annotated_'.(new UnicodeString(str_replace('\\', '', $reflectionClass->getName().(new \ReflectionClass($filterClass))->getName().$suffix)))->snake()->toString();
+        return 'annotated_'.(new UnicodeString(str_replace('\\', '', $reflectionClass->getName().$filterClassName.$suffix)))->snake()->toString();
     }
 }
diff --git a/tests/Fixtures/TestBundle/ApiResource/Issue5648/DummyResource.php b/tests/Fixtures/TestBundle/ApiResource/Issue5648/DummyResource.php
index 62b86ff4684..cc0b2913ea5 100644
--- a/tests/Fixtures/TestBundle/ApiResource/Issue5648/DummyResource.php
+++ b/tests/Fixtures/TestBundle/ApiResource/Issue5648/DummyResource.php
@@ -30,7 +30,7 @@
     ],
     stateOptions: new Options(entityClass: Dummy::class)
 )]
-#[ApiFilter(CustomFilter::class)]
+#[ApiFilter(CustomFilter::class, id: 'custom_filter')]
 class DummyResource
 {
     #[ApiProperty(identifier: true)]