From 06771c17e0202c5365e62388039d2fe3ff4d42bf Mon Sep 17 00:00:00 2001 From: matthieu Date: Sun, 15 Mar 2026 18:27:57 +0100 Subject: [PATCH] fix(bookstack) : add uriVariables to BookStackLink and BookStackSearchResult API Platform 4 requires explicit uriVariables declaration for URI template parameters on DTO resources. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/ApiResource/BookStackLink.php | 13 +++++++++++++ src/ApiResource/BookStackSearchResult.php | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/src/ApiResource/BookStackLink.php b/src/ApiResource/BookStackLink.php index edceecb..f324d6e 100644 --- a/src/ApiResource/BookStackLink.php +++ b/src/ApiResource/BookStackLink.php @@ -7,7 +7,10 @@ namespace App\ApiResource; use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\Delete; use ApiPlatform\Metadata\GetCollection; +use ApiPlatform\Metadata\Link; use ApiPlatform\Metadata\Post; +use App\Entity\Task; +use App\Entity\TaskBookStackLink; use App\State\BookStackLinkProcessor; use App\State\BookStackLinkProvider; use Symfony\Component\Serializer\Attribute\Groups; @@ -16,12 +19,18 @@ use Symfony\Component\Serializer\Attribute\Groups; operations: [ new GetCollection( uriTemplate: '/tasks/{taskId}/bookstack/links', + uriVariables: [ + 'taskId' => new Link(fromClass: Task::class, identifiers: ['id']), + ], normalizationContext: ['groups' => ['bookstack_link:read']], provider: BookStackLinkProvider::class, security: "is_granted('IS_AUTHENTICATED_FULLY')", ), new Post( uriTemplate: '/tasks/{taskId}/bookstack/links', + uriVariables: [ + 'taskId' => new Link(fromClass: Task::class, identifiers: ['id']), + ], denormalizationContext: ['groups' => ['bookstack_link:write']], normalizationContext: ['groups' => ['bookstack_link:read']], provider: BookStackLinkProvider::class, @@ -30,6 +39,10 @@ use Symfony\Component\Serializer\Attribute\Groups; ), new Delete( uriTemplate: '/tasks/{taskId}/bookstack/links/{id}', + uriVariables: [ + 'taskId' => new Link(fromClass: Task::class, identifiers: ['id']), + 'id' => new Link(fromClass: TaskBookStackLink::class, identifiers: ['id']), + ], provider: BookStackLinkProvider::class, processor: BookStackLinkProcessor::class, security: "is_granted('IS_AUTHENTICATED_FULLY')", diff --git a/src/ApiResource/BookStackSearchResult.php b/src/ApiResource/BookStackSearchResult.php index f52a50c..83ca6f9 100644 --- a/src/ApiResource/BookStackSearchResult.php +++ b/src/ApiResource/BookStackSearchResult.php @@ -6,6 +6,8 @@ namespace App\ApiResource; use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\GetCollection; +use ApiPlatform\Metadata\Link; +use App\Entity\Task; use App\State\BookStackSearchResultProvider; use Symfony\Component\Serializer\Attribute\Groups; @@ -13,6 +15,9 @@ use Symfony\Component\Serializer\Attribute\Groups; operations: [ new GetCollection( uriTemplate: '/tasks/{taskId}/bookstack/search', + uriVariables: [ + 'taskId' => new Link(fromClass: Task::class, identifiers: ['id']), + ], normalizationContext: ['groups' => ['bookstack_search:read']], provider: BookStackSearchResultProvider::class, security: "is_granted('IS_AUTHENTICATED_FULLY')",