diff --git a/src/ApiResource/Gateway/CheckoutApiResource.php b/src/ApiResource/Gateway/CheckoutApiResource.php index 6d48369..31f6f36 100644 --- a/src/ApiResource/Gateway/CheckoutApiResource.php +++ b/src/ApiResource/Gateway/CheckoutApiResource.php @@ -17,6 +17,7 @@ use App\Gateway\Tracking; use App\Mapping\Transformer\GatewayIdMapTransformer; use App\State\ApiResourceStateProvider; use App\State\Gateway\CheckoutStateProcessor; +use App\Validator\ChargeToProjectInCampaign; use AutoMapper\Attribute\MapFrom; use AutoMapper\Attribute\MapTo; use Symfony\Component\Validator\Constraints as Assert; @@ -70,6 +71,7 @@ class CheckoutApiResource #[API\ApiProperty(readableLink: true, writableLink: true)] #[Assert\NotBlank()] #[Assert\Count(min: 1)] + #[Assert\All([new ChargeToProjectInCampaign()])] public array $charges = []; /** diff --git a/src/Dto/Gateway/CheckoutCreationDto.php b/src/Dto/Gateway/CheckoutCreationDto.php index b13a963..7ab8980 100644 --- a/src/Dto/Gateway/CheckoutCreationDto.php +++ b/src/Dto/Gateway/CheckoutCreationDto.php @@ -8,6 +8,7 @@ use App\ApiResource\Gateway\GatewayApiResource; use App\Entity\Gateway\Checkout; use App\Gateway\RefundStrategy; use App\Mapping\Transformer\GatewayIdMapTransformer; +use App\Validator\ChargeToProjectInCampaign; use AutoMapper\Attribute\MapFrom; use AutoMapper\Attribute\MapTo; use Symfony\Component\Validator\Constraints as Assert; @@ -37,6 +38,7 @@ class CheckoutCreationDto #[API\ApiProperty(readableLink: true, writableLink: true)] #[Assert\NotBlank()] #[Assert\Count(min: 1)] + #[Assert\All([new ChargeToProjectInCampaign()])] public array $charges = []; /** diff --git a/src/Validator/ChargeToProjectInCampaign.php b/src/Validator/ChargeToProjectInCampaign.php new file mode 100644 index 0000000..b47b38f --- /dev/null +++ b/src/Validator/ChargeToProjectInCampaign.php @@ -0,0 +1,11 @@ +mapper->map($value->target, Accounting::class); + + if ($target->getProject() === null) { + return; + } + + if ($target->getProject()->getStatus() === ProjectStatus::InCampaign) { + return; + } + + $this->context->buildViolation($constraint->message) + ->setParameter('{{ target }}', $value->target->id) + ->setParameter('{{ project }}', $target->getProject()->getId()) + ->addViolation() + ; + } +}