From ffcdd0df25c59f8ba0478bcfd11f5e86f417da50 Mon Sep 17 00:00:00 2001 From: cmorenov1402 Date: Wed, 16 Apr 2025 12:05:38 +0200 Subject: [PATCH] Create charge state processor --- src/ApiResource/Gateway/ChargeApiResource.php | 9 +++- src/Dto/Gateway/ChargeUpdateDto.php | 17 +++++++ src/State/Gateway/ChargeStateProcessor.php | 47 +++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 src/Dto/Gateway/ChargeUpdateDto.php create mode 100644 src/State/Gateway/ChargeStateProcessor.php diff --git a/src/ApiResource/Gateway/ChargeApiResource.php b/src/ApiResource/Gateway/ChargeApiResource.php index a9fa516..6e61812 100644 --- a/src/ApiResource/Gateway/ChargeApiResource.php +++ b/src/ApiResource/Gateway/ChargeApiResource.php @@ -6,11 +6,13 @@ use ApiPlatform\Doctrine\Orm\Filter; use ApiPlatform\Doctrine\Orm\State\Options; use ApiPlatform\Metadata as API; use App\ApiResource\Accounting\AccountingApiResource; +use App\Dto\Gateway\ChargeUpdateDto; use App\Entity\Gateway\Charge; use App\Entity\Money; use App\Gateway\ChargeStatus; use App\Gateway\ChargeType; use App\State\ApiResourceStateProvider; +use App\State\Gateway\ChargeStateProcessor; use Symfony\Component\Validator\Constraints as Assert; /** @@ -23,7 +25,10 @@ use Symfony\Component\Validator\Constraints as Assert; )] #[API\Get()] #[API\GetCollection(security: "is_granted('IS_AUTHENTICATED_FULLY')")] -#[API\Patch()] +#[API\Patch( + input: ChargeUpdateDto::class, + processor: ChargeStateProcessor::class, +)] class ChargeApiResource { #[API\ApiProperty(writable: false, identifier: true)] @@ -78,5 +83,5 @@ class ChargeApiResource */ #[Assert\NotBlank()] #[API\ApiFilter(Filter\SearchFilter::class, properties: ['status' => 'exact'])] - public ChargeStatus $status; + public ChargeStatus $status = ChargeStatus::Pending; } diff --git a/src/Dto/Gateway/ChargeUpdateDto.php b/src/Dto/Gateway/ChargeUpdateDto.php new file mode 100644 index 0000000..7c2557a --- /dev/null +++ b/src/Dto/Gateway/ChargeUpdateDto.php @@ -0,0 +1,17 @@ +autoMapper->map($uriVariables, $data); + + // /** @var Charge */ + // $charge = $this->autoMapper->map($data, Charge::class); + // } + + // $charge = $this->entityStateProcessor->process($charge, $operation, $uriVariables, $context); + $charge = $this->entityStateProcessor->process($data, $operation, $uriVariables, $context); + + if ($charge === null) { + return null; + } + + return $this->autoMapper->map($charge, ChargeApiResource::class); + } +}