Skip to content

Commit 9602663

Browse files
authored
Merge pull request #7 from d-alejandro/feature/develop
Feature/develop
2 parents 1bc683c + 81c0274 commit 9602663

26 files changed

+695
-30
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ cp .env.example .env
5151
- `docker-compose exec php-fpm composer install`
5252
- `docker-compose exec php-fpm php artisan key:generate`
5353
- `docker-compose exec php-fpm php artisan migrate`
54+
- `docker-compose exec php-fpm php artisan db:seed`
5455

5556
## Testing
5657

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
namespace App\DTO\Interfaces;
4+
5+
interface OrderUpdateRequestDTOInterface
6+
{
7+
}

app/DTO/OrderUpdateRequestDTO.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace App\DTO;
4+
5+
use App\DTO\Interfaces\OrderUpdateRequestDTOInterface;
6+
7+
readonly class OrderUpdateRequestDTO implements OrderUpdateRequestDTOInterface
8+
{
9+
public function __construct(
10+
public int $guestCount,
11+
public int $transportCount,
12+
public string $userName,
13+
public string $email,
14+
public string $phone,
15+
public string|null $note = null,
16+
public string|null $adminNote = null
17+
) {
18+
}
19+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Api;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\Interfaces\OrderUpdateRequestInterface;
7+
use App\Presenters\Interfaces\OrderPresenterInterface;
8+
use App\UseCases\Interfaces\OrderUpdateUseCaseInterface;
9+
10+
final class OrderUpdateController extends Controller
11+
{
12+
public function __construct(
13+
private OrderUpdateUseCaseInterface $useCase,
14+
private OrderPresenterInterface $presenter
15+
) {
16+
}
17+
18+
public function __invoke(OrderUpdateRequestInterface $request, int $id): mixed
19+
{
20+
$requestDTO = $request->getValidated();
21+
22+
$response = $this->useCase->execute($requestDTO, $id);
23+
24+
return $this->presenter->present($response);
25+
}
26+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Enums;
4+
5+
use App\Http\Requests\Enums\Interfaces\RequestParamEnumInterface;
6+
7+
enum OrderUpdateRequestParamEnum: string implements RequestParamEnumInterface
8+
{
9+
case GuestCount = 'guest_count';
10+
case TransportCount = 'transport_count';
11+
case UserName = 'user_name';
12+
case Email = 'email';
13+
case Phone = 'phone';
14+
case Note = 'note';
15+
case AdminNote = 'admin_note';
16+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Interfaces;
4+
5+
use App\DTO\Interfaces\OrderUpdateRequestDTOInterface;
6+
7+
interface OrderUpdateRequestInterface
8+
{
9+
public function rules(): array;
10+
11+
public function getValidated(): OrderUpdateRequestDTOInterface;
12+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace App\Http\Requests;
4+
5+
use App\DTO\OrderUpdateRequestDTO;
6+
use App\Helpers\Interfaces\RequestFilterHelperInterface;
7+
use App\Http\Requests\Enums\OrderUpdateRequestParamEnum;
8+
use App\Http\Requests\Interfaces\OrderUpdateRequestInterface;
9+
use App\Providers\Bindings\HelperServiceProvider;
10+
use Illuminate\Foundation\Http\FormRequest;
11+
12+
class OrderUpdateRequest extends FormRequest implements OrderUpdateRequestInterface
13+
{
14+
public function rules(): array
15+
{
16+
return [
17+
OrderUpdateRequestParamEnum::GuestCount->value => 'required|integer|min:1',
18+
OrderUpdateRequestParamEnum::TransportCount->value => 'required|integer|min:1',
19+
OrderUpdateRequestParamEnum::UserName->value => 'required|string|max:100',
20+
OrderUpdateRequestParamEnum::Email->value => 'required|string|email|max:100',
21+
OrderUpdateRequestParamEnum::Phone->value => 'required|string|max:50',
22+
OrderUpdateRequestParamEnum::Note->value => 'nullable|string',
23+
OrderUpdateRequestParamEnum::AdminNote->value => 'nullable|string',
24+
];
25+
}
26+
27+
public function getValidated(): OrderUpdateRequestDTO
28+
{
29+
$requestParams = $this->validated();
30+
31+
/* @var $filter \App\Helpers\RequestFilterHelper */
32+
$filter = resolve(RequestFilterHelperInterface::class, [
33+
HelperServiceProvider::PARAM_REQUEST_PARAMS => $requestParams,
34+
]);
35+
36+
return new OrderUpdateRequestDTO(
37+
$requestParams[OrderUpdateRequestParamEnum::GuestCount->value],
38+
$requestParams[OrderUpdateRequestParamEnum::TransportCount->value],
39+
$requestParams[OrderUpdateRequestParamEnum::UserName->value],
40+
$requestParams[OrderUpdateRequestParamEnum::Email->value],
41+
$requestParams[OrderUpdateRequestParamEnum::Phone->value],
42+
$filter->checkRequestParam(OrderUpdateRequestParamEnum::Note),
43+
$filter->checkRequestParam(OrderUpdateRequestParamEnum::AdminNote)
44+
);
45+
}
46+
}

app/Providers/Bindings/RepositoryServiceProvider.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
use App\Repositories\Interfaces\OrderIndexRepositoryInterface;
1212
use App\Repositories\Interfaces\OrderShowRepositoryInterface;
1313
use App\Repositories\Interfaces\OrderStoreRepositoryInterface;
14+
use App\Repositories\Interfaces\OrderUpdateRepositoryInterface;
1415
use App\Repositories\OrderDestroyRepository;
1516
use App\Repositories\OrderIndexRepository;
1617
use App\Repositories\OrderShowRepository;
1718
use App\Repositories\OrderStoreRepository;
1819
use App\Repositories\OrderStoreRepositoryDecorator;
20+
use App\Repositories\OrderUpdateRepository;
1921
use App\UseCases\OrderStoreUseCase;
2022
use Illuminate\Support\ServiceProvider;
2123

@@ -46,5 +48,7 @@ public function register(): void
4648
->give(fn() => new CriteriaApplier(Order::class));
4749

4850
$this->app->bind(OrderDestroyRepositoryInterface::class, OrderDestroyRepository::class);
51+
52+
$this->app->bind(OrderUpdateRepositoryInterface::class, OrderUpdateRepository::class);
4953
}
5054
}

app/Providers/Bindings/RequestServiceProvider.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
namespace App\Providers\Bindings;
44

55
use App\Http\Requests\Interfaces\OrderStoreRequestInterface;
6+
use App\Http\Requests\Interfaces\OrderUpdateRequestInterface;
67
use App\Http\Requests\OrderIndexRequest;
78
use App\Http\Requests\Interfaces\OrderIndexRequestInterface;
89
use App\Http\Requests\OrderStoreRequest;
10+
use App\Http\Requests\OrderUpdateRequest;
911
use Illuminate\Support\ServiceProvider;
1012

1113
class RequestServiceProvider extends ServiceProvider
@@ -14,5 +16,6 @@ public function register(): void
1416
{
1517
$this->app->bind(OrderIndexRequestInterface::class, OrderIndexRequest::class);
1618
$this->app->bind(OrderStoreRequestInterface::class, OrderStoreRequest::class);
19+
$this->app->bind(OrderUpdateRequestInterface::class, OrderUpdateRequest::class);
1720
}
1821
}

app/Providers/Bindings/UseCaseServiceProvider.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
use App\UseCases\Interfaces\OrderDestroyUseCaseInterface;
66
use App\UseCases\Interfaces\OrderShowUseCaseInterface;
77
use App\UseCases\Interfaces\OrderStoreUseCaseInterface;
8+
use App\UseCases\Interfaces\OrderUpdateUseCaseInterface;
89
use App\UseCases\OrderDestroyUseCase;
910
use App\UseCases\OrderIndexUseCase;
1011
use App\UseCases\Interfaces\OrderIndexUseCaseInterface;
1112
use App\UseCases\OrderShowUseCase;
1213
use App\UseCases\OrderStoreUseCase;
14+
use App\UseCases\OrderUpdateUseCase;
1315
use Illuminate\Support\ServiceProvider;
1416

1517
class UseCaseServiceProvider extends ServiceProvider
@@ -20,5 +22,6 @@ public function register(): void
2022
$this->app->bind(OrderStoreUseCaseInterface::class, OrderStoreUseCase::class);
2123
$this->app->bind(OrderShowUseCaseInterface::class, OrderShowUseCase::class);
2224
$this->app->bind(OrderDestroyUseCaseInterface::class, OrderDestroyUseCase::class);
25+
$this->app->bind(OrderUpdateUseCaseInterface::class, OrderUpdateUseCase::class);
2326
}
2427
}

0 commit comments

Comments
 (0)