Mod Contribtion validation

This commit is contained in:
philipp lang 2025-06-21 00:24:21 +02:00
parent 79d92a6567
commit aab004f1f1
6 changed files with 12 additions and 56 deletions

View File

@ -23,7 +23,7 @@ class GenerateAction
public function asController(GenerateRequest $request): BaseCompiler|JsonResponse public function asController(GenerateRequest $request): BaseCompiler|JsonResponse
{ {
app(ContributionFactory::class)->validateType($request); app(ContributionFactory::class)->validateType($request);
app(ContributionFactory::class)->validatePayload($request); $request->validateContribution();
return $request->input('validate') return $request->input('validate')
? response()->json([]) ? response()->json([])

View File

@ -26,8 +26,5 @@ interface HasContributionData {
public function country(): ?Country; public function country(): ?Country;
/** public function validateContribution(): void;
* @return array<string, mixed>
*/
public function payload(): array;
} }

View File

@ -66,7 +66,3 @@ class ContributionFactory
Validator::make(['type' => $request->type()], $this->typeRule())->validate(); Validator::make(['type' => $request->type()], $this->typeRule())->validate();
} }
public function validatePayload(HasContributionData $request): void {
Validator::make($request->payload(), $this->rules($request->type()))->validate();
}
}

View File

@ -2,17 +2,10 @@
namespace App\Contribution\Requests; namespace App\Contribution\Requests;
use App\Contribution\Contracts\HasContributionData;
use App\Contribution\Data\MemberData; 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 Illuminate\Support\Collection;
use RuntimeException;
class GenerateApiRequest extends ActionRequest implements HasContributionData { class GenerateApiRequest extends GenerateRequest {
/** /**
* @return array<string, string> * @return array<string, string>
*/ */
@ -21,47 +14,11 @@ class GenerateApiRequest extends ActionRequest implements HasContributionData {
return $this->input(); return $this->input();
} }
/** public function validateContribution(): void {
* @return string|array<array-key, mixed>
*/
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<ContributionDocument>
*/
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 members(): Collection { public function members(): Collection {
return MemberData::fromApi($this->value('member_data')); return MemberData::fromApi($this->value('members'));
}
public function country(): ?Country {
return Country::where('id', $this->value('country'))->first();
} }
} }

View File

@ -3,12 +3,14 @@
namespace App\Contribution\Requests; namespace App\Contribution\Requests;
use App\Contribution\Contracts\HasContributionData; use App\Contribution\Contracts\HasContributionData;
use App\Contribution\ContributionFactory;
use App\Contribution\Data\MemberData; use App\Contribution\Data\MemberData;
use App\Contribution\Documents\ContributionDocument; use App\Contribution\Documents\ContributionDocument;
use App\Country; use App\Country;
use Lorisleiva\Actions\ActionRequest; use Lorisleiva\Actions\ActionRequest;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Validator;
class GenerateRequest extends ActionRequest implements HasContributionData { 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); 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<array-key, mixed> * @return string|array<array-key, mixed>
*/ */

View File

@ -89,7 +89,7 @@ it('testItCompilesContributionDocumentsViaApi', function (string $type, array $b
'eventName' => 'Super tolles Lager', 'eventName' => 'Super tolles Lager',
'type' => $type, 'type' => $type,
'zipLocation' => '42777 SG', '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' => 'Max', 'lastname' => 'Muster']),
ContributionMemberApiRequestFactory::new()->create(['address' => 'Maxstr 44', 'zip' => '42719', 'firstname' => 'Jane', 'lastname' => 'Muster']), ContributionMemberApiRequestFactory::new()->create(['address' => 'Maxstr 44', 'zip' => '42719', 'firstname' => 'Jane', 'lastname' => 'Muster']),
], ],