ldc-mesbr-app/src/Application/UseCases/CampaignRequest/List/ListCampaignsRequest.php
2026-09-29 17:38:47 +02:00

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(),
),
);
}
}