Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 0 additions & 29 deletions app/Exceptions/Handler.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;

class Handler extends ExceptionHandler
{
Expand All @@ -26,31 +24,4 @@ class Handler extends ExceptionHandler
'password',
'password_confirmation',
];

/**
* Report or log an exception.
*
* @param \Throwable $exception
* @return void
*
* @throws \Throwable
*/
public function report(Throwable $exception)
{
parent::report($exception);
}

/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Throwable $exception
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \Throwable
*/
public function render($request, Throwable $exception)
{
return parent::render($request, $exception);
}
}
48 changes: 48 additions & 0 deletions app/Factories/Rules/ProviderConfigurationRuleFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

declare(strict_types=1);

namespace App\Factories\Rules;

use App\Rules\ProviderConfigurationRule;
use InvalidArgumentException;
use Upmind\ProvisionBase\Registry\Registry;

class ProviderConfigurationRuleFactory
{
/**
* @throws \InvalidArgumentException
*/
public static function create(array $params): ProviderConfigurationRule
{
self::validate($params);

return new ProviderConfigurationRule($params['registry'], $params['category_code'], $params['provider_code']);
}

/**
* @throws \InvalidArgumentException
*/
private static function validate(array $params): void
{
$required = ['registry', 'category_code', 'provider_code'];

foreach ($required as $key) {
if (!isset($key, $params)) {
throw new InvalidArgumentException('Missing required parameter: ' . $key);
}
}

if (!is_string($params['category_code'])) {
throw new InvalidArgumentException('Expected string for `category_code`');
}

if (!is_string($params['provider_code'])) {
throw new InvalidArgumentException('Expected string for `provider_code`');
}

if (!($params['registry'] instanceof Registry)) {
throw new InvalidArgumentException('Expected \Upmind\ProvisionBase\Registry instance for `registry`');
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,27 @@
use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\InteractsWithRegistry;
use App\Models\ProviderConfiguration;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;

class ProviderConfigurationDestroyController extends Controller
{
use InteractsWithRegistry;

public function __invoke(Request $request, ProviderConfiguration $configuration)
public function __construct(
private readonly Redirector $redirector
) {
}

public function __invoke(Request $request, ProviderConfiguration $configuration): RedirectResponse
{
$configuration->delete();

return redirect(route('provider-show', [
return $this->redirector->route('provider-show', [
'category_code' => $configuration->category_code,
'provider_code' => $configuration->provider_code,
'configuration_deleted' => 1
]));
]);
}
}
36 changes: 19 additions & 17 deletions app/Http/Controllers/Web/ProviderConfigurationStoreController.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,37 @@
use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\InteractsWithRegistry;
use App\Http\Controllers\Traits\TransformsArrayDot;
use App\Http\Requests\StoreProviderConfiguration;
use App\Http\Requests\ProviderConfigurationStoreRequest;
use App\Services\ProviderConfigurationService;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Illuminate\Http\RedirectResponse;
use Illuminate\Routing\Redirector;
use Upmind\ProvisionBase\Registry\Registry;

class ProviderConfigurationStoreController extends Controller
{
use InteractsWithRegistry;
use TransformsArrayDot;

public function __invoke(StoreProviderConfiguration $request, Registry $registry)
public function __construct(
private readonly ProviderConfigurationService $service,
private readonly Redirector $redirector
) {
}

public function __invoke(ProviderConfigurationStoreRequest $request, Registry $registry): RedirectResponse
{
/** @var \Upmind\ProvisionBase\Registry\Data\ProviderRegister $provider */
$provider = $this->getProvider($registry, $request);

try {
$service = new ProviderConfigurationService();
$configuration = $service->create(
$provider,
$request->get('name'),
$this->undot($request->get('field_values', []))
);
} catch (ValidationException $e) {
return redirect()->back()->withErrors($e->errors());
}

return redirect(route('provider-configuration-show', [
$configuration = $this->service->create(
$provider,
$request->post('name'),
$this->undot($request->post('field_values', []))
);

return $this->redirector->route('provider-configuration-show', [
'configuration' => $configuration,
'created' => 1,
]));
]);
}
}
40 changes: 21 additions & 19 deletions app/Http/Controllers/Web/ProviderConfigurationUpdateController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,36 @@
namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\InteractsWithRegistry;
use App\Http\Controllers\Traits\TransformsArrayDot;
use App\Http\Requests\ProviderConfigurationUpdateRequest;
use App\Models\ProviderConfiguration;
use App\Services\ProviderConfigurationService;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Illuminate\Http\RedirectResponse;
use Illuminate\Routing\Redirector;

class ProviderConfigurationUpdateController extends Controller
{
use InteractsWithRegistry;
use TransformsArrayDot;

public function __invoke(Request $request, ProviderConfiguration $configuration)
{
try {
$service = new ProviderConfigurationService();
$service->update(
$configuration,
$request->get('name'),
$this->undot($request->get('field_values', []))
);
} catch (ValidationException $e) {
return redirect()->back()->withErrors($e->errors(), 'field_values');
}
public function __construct(
private readonly ProviderConfigurationService $service,
private readonly Redirector $redirector
) {
}

public function __invoke(
ProviderConfigurationUpdateRequest $request,
ProviderConfiguration $configuration
): RedirectResponse {
$configuration = $this->service->update(
$configuration,
$request->post('name'),
$this->undot($request->post('field_values', []))
);

return redirect(route('provider-configuration-show', [
return $this->redirector->route('provider-configuration-show', [
'configuration' => $configuration,
'updated' => 1
]));
'updated' => 1,
]);
}
}
48 changes: 48 additions & 0 deletions app/Http/Requests/ProviderConfigurationStoreRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

declare(strict_types=1);

namespace App\Http\Requests;

use App\Factories\Rules\ProviderConfigurationRuleFactory;
use Illuminate\Foundation\Http\FormRequest;
use Upmind\ProvisionBase\Registry\Registry;

class ProviderConfigurationStoreRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array<string, array<array-key, string|\App\Rules\ProviderConfigurationRule>>
*
* @throws \InvalidArgumentException
*/
public function rules(Registry $registry): array
{
return [
'name' => [
'required',
'string',
'max:255'
],
'field_values' => [
'array',
'nullable',
ProviderConfigurationRuleFactory::create([
'registry' => $registry,
// We don't really expect these to be any other than strings.
'category_code' => (string) $this->route('category_code'),
'provider_code' => (string) $this->route('provider_code'),
]),
],
];
}
}
51 changes: 51 additions & 0 deletions app/Http/Requests/ProviderConfigurationUpdateRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php

declare(strict_types=1);

namespace App\Http\Requests;

use App\Factories\Rules\ProviderConfigurationRuleFactory;
use Illuminate\Foundation\Http\FormRequest;
use Upmind\ProvisionBase\Registry\Registry;

class ProviderConfigurationUpdateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array<string, array<array-key, string|\App\Rules\ProviderConfigurationRule>>
*
* @throws \InvalidArgumentException
*/
public function rules(Registry $registry): array
{
/** @var \App\Models\ProviderConfiguration $configuration */
$configuration = $this->route('configuration');

return [
'name' => [
'required',
'string',
'max:255'
],
'field_values' => [
'array',
'nullable',
ProviderConfigurationRuleFactory::create([
'registry' => $registry,
// Pass category_code and provider_code from the configuration model
'category_code' => $configuration->category_code,
'provider_code' => $configuration->provider_code,
]),
],
];
}
}
34 changes: 0 additions & 34 deletions app/Http/Requests/StoreProviderConfiguration.php

This file was deleted.

Loading