From f3a8cedd72f4177dcd5bd91353c2df9279eabc5b Mon Sep 17 00:00:00 2001 From: Daniel Subiabre Date: Tue, 10 Dec 2024 14:45:22 +0100 Subject: [PATCH] Add custom project api resource state processor --- .../Project/ProjectApiResource.php | 10 ++++- src/State/Project/ProjectStateProcessor.php | 39 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/State/Project/ProjectStateProcessor.php diff --git a/src/ApiResource/Project/ProjectApiResource.php b/src/ApiResource/Project/ProjectApiResource.php index 0873ff7..f8cf273 100644 --- a/src/ApiResource/Project/ProjectApiResource.php +++ b/src/ApiResource/Project/ProjectApiResource.php @@ -6,9 +6,11 @@ use ApiPlatform\Doctrine\Orm\Filter\SearchFilter; use ApiPlatform\Doctrine\Orm\State\Options; use ApiPlatform\Metadata as API; use App\ApiResource\Accounting\AccountingApiResource; +use App\ApiResource\User\UserApiResource; use App\Entity\Project\Project; use App\Entity\Project\ProjectStatus; use App\State\ApiResourceStateProvider; +use App\State\Project\ProjectStateProcessor; use Symfony\Component\Validator\Constraints as Assert; /** @@ -18,6 +20,7 @@ use Symfony\Component\Validator\Constraints as Assert; shortName: 'Project', stateOptions: new Options(entityClass: Project::class), provider: ApiResourceStateProvider::class, + processor: ProjectStateProcessor::class )] #[API\GetCollection()] #[API\Post(security: 'is_granted("ROLE_USER")')] @@ -35,11 +38,16 @@ class ProjectApiResource #[API\ApiProperty(writable: false)] public AccountingApiResource $accounting; + /** + * The User who owns this Project. + */ + #[API\ApiProperty(writable: false)] + public UserApiResource $owner; + /** * Main title for the Project. */ #[API\ApiFilter(filterClass: SearchFilter::class, strategy: 'partial')] - #[API\ApiProperty(securityPostDenormalize: 'is_granted("PROJECT_EDIT")')] #[Assert\NotBlank()] public string $title; diff --git a/src/State/Project/ProjectStateProcessor.php b/src/State/Project/ProjectStateProcessor.php new file mode 100644 index 0000000..fa3cfab --- /dev/null +++ b/src/State/Project/ProjectStateProcessor.php @@ -0,0 +1,39 @@ +id)) { + $user = $this->security->getUser(); + $owner = $this->userRepository->findOneByIdentifier($user->getUserIdentifier()); + + $data->owner = $this->autoMapper->map($owner, UserApiResource::class); + } + + return $this->stateProcessor->process($data, $operation, $uriVariables, $context); + } +}