52 lines
1.6 KiB
PHP
52 lines
1.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Application\UseCases\CampaignRequest\List;
|
|
|
|
use Domain\Models\Entities\CampaignRequest;
|
|
use Domain\Ports\Repositories\CampaignRequestRepository;
|
|
use Shared\DDD\UseCases\Input as BaseInput;
|
|
use Shared\DDD\UseCases\UseCase;
|
|
use Shared\ValueObjects\Pagination\Paginated;
|
|
use Webmozart\Assert\Assert;
|
|
|
|
/** @implements UseCase<\Application\UseCases\CampaignRequest\List\Input, \Application\UseCases\CampaignRequest\List\Output> */
|
|
final readonly class ListCampaignsRequest implements UseCase
|
|
{
|
|
public function __construct(
|
|
private CampaignRequestRepository $repository,
|
|
) {
|
|
}
|
|
|
|
#[\Override]
|
|
public function execute(BaseInput $input): Output
|
|
{
|
|
Assert::isInstanceOf($input, Input::class);
|
|
|
|
$result = $this->repository->findAll(
|
|
pagination: $input->pagination,
|
|
sortCriteria: $input->sort,
|
|
filters: $input->filters
|
|
);
|
|
|
|
$items = array_map(
|
|
static fn (CampaignRequest $campaignRequest): CampaignRequestListItem => new CampaignRequestListItem(
|
|
brandCode: $campaignRequest->brandCode,
|
|
name: $campaignRequest->name,
|
|
applicant: $campaignRequest->applicant,
|
|
campaignType: $campaignRequest->campaignType,
|
|
status: $campaignRequest->status
|
|
),
|
|
$result->getItems(),
|
|
);
|
|
|
|
return new Output(
|
|
campaignsRequest: new Paginated(
|
|
pagination: $result->getPagination(),
|
|
items: $items,
|
|
total: $result->getTotal(),
|
|
),
|
|
);
|
|
}
|
|
}
|