From aab004f1f1e819fa4cbcf9847ac07c6420575c66 Mon Sep 17 00:00:00 2001 From: philipp lang Date: Sat, 21 Jun 2025 00:24:21 +0200 Subject: [PATCH] Mod Contribtion validation --- app/Contribution/Actions/GenerateAction.php | 2 +- .../Contracts/HasContributionData.php | 5 +- app/Contribution/ContributionFactory.php | 4 -- .../Requests/GenerateApiRequest.php | 49 ++----------------- app/Contribution/Requests/GenerateRequest.php | 6 +++ tests/Feature/Contribution/StoreTest.php | 2 +- 6 files changed, 12 insertions(+), 56 deletions(-) diff --git a/app/Contribution/Actions/GenerateAction.php b/app/Contribution/Actions/GenerateAction.php index f90e2e1e..61fb953c 100644 --- a/app/Contribution/Actions/GenerateAction.php +++ b/app/Contribution/Actions/GenerateAction.php @@ -23,7 +23,7 @@ class GenerateAction public function asController(GenerateRequest $request): BaseCompiler|JsonResponse { app(ContributionFactory::class)->validateType($request); - app(ContributionFactory::class)->validatePayload($request); + $request->validateContribution(); return $request->input('validate') ? response()->json([]) diff --git a/app/Contribution/Contracts/HasContributionData.php b/app/Contribution/Contracts/HasContributionData.php index 96ee3309..8dda126e 100644 --- a/app/Contribution/Contracts/HasContributionData.php +++ b/app/Contribution/Contracts/HasContributionData.php @@ -26,8 +26,5 @@ interface HasContributionData { public function country(): ?Country; - /** - * @return array - */ - public function payload(): array; + public function validateContribution(): void; } diff --git a/app/Contribution/ContributionFactory.php b/app/Contribution/ContributionFactory.php index 163b897b..8e510389 100644 --- a/app/Contribution/ContributionFactory.php +++ b/app/Contribution/ContributionFactory.php @@ -66,7 +66,3 @@ class ContributionFactory Validator::make(['type' => $request->type()], $this->typeRule())->validate(); } - public function validatePayload(HasContributionData $request): void { - Validator::make($request->payload(), $this->rules($request->type()))->validate(); - } -} diff --git a/app/Contribution/Requests/GenerateApiRequest.php b/app/Contribution/Requests/GenerateApiRequest.php index 62b47bea..a6afde1d 100644 --- a/app/Contribution/Requests/GenerateApiRequest.php +++ b/app/Contribution/Requests/GenerateApiRequest.php @@ -2,17 +2,10 @@ namespace App\Contribution\Requests; -use App\Contribution\Contracts\HasContributionData; use App\Contribution\Data\MemberData; -use App\Contribution\Documents\ContributionDocument; -use App\Country; -use Lorisleiva\Actions\ActionRequest; -use Carbon\Carbon; -use Illuminate\Support\Arr; use Illuminate\Support\Collection; -use RuntimeException; -class GenerateApiRequest extends ActionRequest implements HasContributionData { +class GenerateApiRequest extends GenerateRequest { /** * @return array */ @@ -21,47 +14,11 @@ class GenerateApiRequest extends ActionRequest implements HasContributionData { return $this->input(); } - /** - * @return string|array - */ - public function value(string $key): string|array - { - if (!Arr::has($this->payload(), $key)) { - throw new RuntimeException('Wert für '.$key.' nicht gefunden.'); - } - return data_get($this->payload(), $key); - } - - /** - * @return class-string - */ - public function type(): string - { - return $this->value('type'); - } - - public function dateFrom(): Carbon { - return Carbon::parse($this->value('dateFrom')); - } - - public function dateUntil(): Carbon { - return Carbon::parse($this->value('dateUntil')); - } - - public function zipLocation(): string { - return $this->value('zipLocation'); - } - - public function eventName(): string { - return $this->value('eventName'); + public function validateContribution(): void { } public function members(): Collection { - return MemberData::fromApi($this->value('member_data')); - } - - public function country(): ?Country { - return Country::where('id', $this->value('country'))->first(); + return MemberData::fromApi($this->value('members')); } } diff --git a/app/Contribution/Requests/GenerateRequest.php b/app/Contribution/Requests/GenerateRequest.php index 08841338..4a460e47 100644 --- a/app/Contribution/Requests/GenerateRequest.php +++ b/app/Contribution/Requests/GenerateRequest.php @@ -3,12 +3,14 @@ namespace App\Contribution\Requests; use App\Contribution\Contracts\HasContributionData; +use App\Contribution\ContributionFactory; use App\Contribution\Data\MemberData; use App\Contribution\Documents\ContributionDocument; use App\Country; use Lorisleiva\Actions\ActionRequest; use Carbon\Carbon; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Validator; class GenerateRequest extends ActionRequest implements HasContributionData { /** @@ -19,6 +21,10 @@ class GenerateRequest extends ActionRequest implements HasContributionData { return json_decode(rawurldecode(base64_decode($this->input('payload', ''))), true); } + public function validateContribution(): void { + Validator::make($this->payload(), app(ContributionFactory::class)->rules($this->type()))->validate(); + } + /** * @return string|array */ diff --git a/tests/Feature/Contribution/StoreTest.php b/tests/Feature/Contribution/StoreTest.php index aeb70a61..ac2ac610 100644 --- a/tests/Feature/Contribution/StoreTest.php +++ b/tests/Feature/Contribution/StoreTest.php @@ -89,7 +89,7 @@ it('testItCompilesContributionDocumentsViaApi', function (string $type, array $b 'eventName' => 'Super tolles Lager', 'type' => $type, 'zipLocation' => '42777 SG', - 'member_data' => [ + 'members' => [ ContributionMemberApiRequestFactory::new()->create(['address' => 'Maxstr 44', 'zip' => '42719', 'firstname' => 'Max', 'lastname' => 'Muster']), ContributionMemberApiRequestFactory::new()->create(['address' => 'Maxstr 44', 'zip' => '42719', 'firstname' => 'Jane', 'lastname' => 'Muster']), ],