refactor(security): unify ClientDirectory reading methods into ClientRepository
This commit is contained in:
parent
cb97e6f591
commit
55576a6971
9 changed files with 27 additions and 50 deletions
|
|
@ -1,25 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Application\Security\Ports\Directories;
|
||||
|
||||
use Application\Security\Models\Entities\Client;
|
||||
use Application\Security\Models\ValueObjects\Entities\ClientId;
|
||||
use Shared\DDD\Port\Directory;
|
||||
use Shared\Paginated;
|
||||
use Shared\Pagination;
|
||||
|
||||
/**
|
||||
* @extends Directory<ClientId, Client>
|
||||
*/
|
||||
interface ClientDirectory extends Directory
|
||||
{
|
||||
public function find(ClientId $id): ?Client;
|
||||
|
||||
/** @return Paginated<Client> */
|
||||
public function search(string $query, Pagination $pagination): Paginated;
|
||||
|
||||
/** @return Paginated<Client> */
|
||||
public function findAll(Pagination $pagination): Paginated;
|
||||
}
|
||||
|
|
@ -9,6 +9,8 @@ use Application\Security\Models\ValueObjects\ClientIdentifier;
|
|||
use Application\Security\Models\ValueObjects\ClientName;
|
||||
use Application\Security\Models\ValueObjects\Entities\ClientId;
|
||||
use Shared\DDD\Port\Repository;
|
||||
use Shared\Paginated;
|
||||
use Shared\Pagination;
|
||||
|
||||
/**
|
||||
* @extends Repository<ClientId, Client>
|
||||
|
|
@ -21,6 +23,12 @@ interface ClientRepository extends Repository
|
|||
|
||||
public function existsByName(ClientName $name): bool;
|
||||
|
||||
/** @return Paginated<Client> */
|
||||
public function search(string $query, Pagination $pagination): Paginated;
|
||||
|
||||
/** @return Paginated<Client> */
|
||||
public function findAll(Pagination $pagination): Paginated;
|
||||
|
||||
public function persist(Client $client): void;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ declare(strict_types=1);
|
|||
namespace Application\Security\Usecases\FindAllClients;
|
||||
|
||||
use Application\Security\Models\Entities\Client;
|
||||
use Application\Security\Ports\Directories\ClientDirectory;
|
||||
use Application\Security\Ports\Repositories\ClientRepository;
|
||||
use Shared\DDD\Usecase\Input as BaseInput;
|
||||
use Shared\DDD\Usecase\Usecase;
|
||||
use Shared\Paginated;
|
||||
|
|
@ -15,7 +15,7 @@ use Webmozart\Assert\Assert;
|
|||
final readonly class FindAllClients implements Usecase
|
||||
{
|
||||
public function __construct(
|
||||
private ClientDirectory $directory,
|
||||
private ClientRepository $repository,
|
||||
) {
|
||||
}
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ final readonly class FindAllClients implements Usecase
|
|||
{
|
||||
Assert::isInstanceOf($input, Input::class);
|
||||
|
||||
$page = $this->directory->findAll($input->pagination);
|
||||
$page = $this->repository->findAll($input->pagination);
|
||||
|
||||
return $this->toOutput($page);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace Application\Security\Usecases\FindClient;
|
||||
|
||||
use Application\Security\Ports\Directories\ClientDirectory;
|
||||
use Application\Security\Ports\Repositories\ClientRepository;
|
||||
use Shared\DDD\Usecase\Input as BaseInput;
|
||||
use Shared\DDD\Usecase\Usecase;
|
||||
use Shared\Pagination;
|
||||
|
|
@ -14,7 +14,7 @@ use Webmozart\Assert\Assert;
|
|||
final readonly class FindClient implements Usecase
|
||||
{
|
||||
public function __construct(
|
||||
private ClientDirectory $clientDirectory,
|
||||
private ClientRepository $clientRepository,
|
||||
) {
|
||||
}
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ final readonly class FindClient implements Usecase
|
|||
Assert::isInstanceOf($input, Input::class);
|
||||
|
||||
$pagination = $input->pagination ?? Pagination::ofOffsetAndLimit(0, 20);
|
||||
$paginated = $this->clientDirectory->search($input->query, $pagination);
|
||||
$paginated = $this->clientRepository->search($input->query, $pagination);
|
||||
|
||||
return new Output($paginated);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,14 +9,13 @@ use Application\Security\Models\Entities\Client;
|
|||
use Application\Security\Models\ValueObjects\ClientIdentifier;
|
||||
use Application\Security\Models\ValueObjects\ClientName;
|
||||
use Application\Security\Models\ValueObjects\Entities\ClientId;
|
||||
use Application\Security\Ports\Directories\ClientDirectory;
|
||||
use Application\Security\Ports\Repositories\ClientRepository;
|
||||
use Illuminate\Support\Str;
|
||||
use Infra\Database\Models\ApiClient;
|
||||
use Shared\Paginated;
|
||||
use Shared\Pagination;
|
||||
|
||||
final class ApiClientRepository implements ClientDirectory, ClientRepository
|
||||
final class ApiClientRepository implements ClientRepository
|
||||
{
|
||||
#[\Override]
|
||||
public function persist(Client $client): void
|
||||
|
|
|
|||
|
|
@ -9,13 +9,12 @@ use Application\Security\Models\Entities\Client;
|
|||
use Application\Security\Models\ValueObjects\ClientIdentifier;
|
||||
use Application\Security\Models\ValueObjects\ClientName;
|
||||
use Application\Security\Models\ValueObjects\Entities\ClientId;
|
||||
use Application\Security\Ports\Directories\ClientDirectory;
|
||||
use Application\Security\Ports\Repositories\ClientRepository;
|
||||
use Illuminate\Support\Str;
|
||||
use Shared\Paginated;
|
||||
use Shared\Pagination;
|
||||
|
||||
final class InMemoryClientRepository implements ClientDirectory, ClientRepository
|
||||
final class InMemoryClientRepository implements ClientRepository
|
||||
{
|
||||
/** @var array<string, Client> */
|
||||
private array $clients = [];
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ declare(strict_types=1);
|
|||
namespace Infra\Providers;
|
||||
|
||||
use Application\Arcadia\Config\AppConfig;
|
||||
use Application\Security\Ports\Directories\ClientDirectory;
|
||||
use Application\Security\Ports\Repositories\ClientRepository;
|
||||
use Application\Security\Ports\Services\ClientCredentialGenerator;
|
||||
use Application\Security\Ports\Services\HmacSignatureValidator;
|
||||
|
|
@ -35,7 +34,6 @@ final class SecurityServiceProvider extends ServiceProvider
|
|||
{
|
||||
$this->app->bind(ClientCredentialGenerator::class, ClientCredentialGeneratorImpl::class);
|
||||
$this->app->bind(ClientRepository::class, ApiClientRepository::class);
|
||||
$this->app->bind(ClientDirectory::class, ApiClientRepository::class);
|
||||
$this->app->bind(HmacSignatureValidator::class, HmacSignatureValidatorImpl::class);
|
||||
|
||||
$this->app->bind(NonceValidator::class, function (Application $app): CachedNonceValidator {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ namespace Presentation\Console\Services;
|
|||
use Application\Security\Models\Entities\Client;
|
||||
use Application\Security\Models\ValueObjects\ClientIdentifier;
|
||||
use Application\Security\Models\ValueObjects\Entities\ClientId;
|
||||
use Application\Security\Ports\Directories\ClientDirectory;
|
||||
use Application\Security\Ports\Repositories\ClientRepository;
|
||||
use Application\Security\Usecases\FindClient\FindClient;
|
||||
use Application\Security\Usecases\FindClient\Input as FindClientInput;
|
||||
|
|
@ -23,7 +22,6 @@ final readonly class ClientConsoleResolver
|
|||
{
|
||||
public function __construct(
|
||||
private ClientRepository $clientRepository,
|
||||
private ClientDirectory $clientDirectory,
|
||||
private FindClient $findClient,
|
||||
private UsecaseExecutor $executor,
|
||||
) {
|
||||
|
|
@ -34,7 +32,7 @@ final readonly class ClientConsoleResolver
|
|||
*/
|
||||
public function complete(CompletionSuggestions $suggestions): void
|
||||
{
|
||||
$clients = $this->clientDirectory->findAll(Pagination::ofOffsetAndLimit(0, 100));
|
||||
$clients = $this->clientRepository->findAll(Pagination::ofOffsetAndLimit(0, 100));
|
||||
|
||||
/** @var list<Suggestion> $items */
|
||||
$items = array_map(
|
||||
|
|
@ -58,7 +56,7 @@ final readonly class ClientConsoleResolver
|
|||
$trimmed = trim($value);
|
||||
|
||||
if ($trimmed === '') {
|
||||
$clients = $this->clientDirectory->findAll(Pagination::ofOffsetAndLimit(0, 10));
|
||||
$clients = $this->clientRepository->findAll(Pagination::ofOffsetAndLimit(0, 10));
|
||||
$options = [];
|
||||
foreach ($clients->getItems() as $client) {
|
||||
$options[$client->identifier->value] = sprintf(
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ describe('ClientConsoleResolver Unit Tests', function (): void {
|
|||
);
|
||||
|
||||
$repository->add($client1, $client2);
|
||||
$resolver = new ClientConsoleResolver($repository, $repository, $findClient, $executor);
|
||||
$resolver = new ClientConsoleResolver($repository, $findClient, $executor);
|
||||
$suggestions = new CompletionSuggestions();
|
||||
|
||||
// WHEN
|
||||
|
|
@ -87,7 +87,7 @@ describe('ClientConsoleResolver Unit Tests', function (): void {
|
|||
);
|
||||
|
||||
$repository->add($client);
|
||||
$resolver = new ClientConsoleResolver($repository, $repository, $findClient, $executor);
|
||||
$resolver = new ClientConsoleResolver($repository, $findClient, $executor);
|
||||
|
||||
// WHEN
|
||||
$options = $resolver->searchOptions(' ');
|
||||
|
|
@ -109,7 +109,7 @@ describe('ClientConsoleResolver Unit Tests', function (): void {
|
|||
);
|
||||
|
||||
$repository->add($client);
|
||||
$resolver = new ClientConsoleResolver($repository, $repository, $findClient, $executor);
|
||||
$resolver = new ClientConsoleResolver($repository, $findClient, $executor);
|
||||
|
||||
// WHEN
|
||||
$options = $resolver->searchOptions('beta');
|
||||
|
|
@ -130,7 +130,7 @@ describe('ClientConsoleResolver Unit Tests', function (): void {
|
|||
}
|
||||
};
|
||||
|
||||
$resolver = new ClientConsoleResolver($repository, $repository, $findClient, $failingExecutor);
|
||||
$resolver = new ClientConsoleResolver($repository, $findClient, $failingExecutor);
|
||||
|
||||
// WHEN
|
||||
$options = $resolver->searchOptions('broken');
|
||||
|
|
@ -152,7 +152,7 @@ describe('ClientConsoleResolver Unit Tests', function (): void {
|
|||
);
|
||||
|
||||
$repository->add($client);
|
||||
$resolver = new ClientConsoleResolver($repository, $repository, $findClient, $executor);
|
||||
$resolver = new ClientConsoleResolver($repository, $findClient, $executor);
|
||||
|
||||
// WHEN
|
||||
$found = $resolver->find("Selected: {$identifier} (Active)");
|
||||
|
|
@ -175,7 +175,7 @@ describe('ClientConsoleResolver Unit Tests', function (): void {
|
|||
);
|
||||
|
||||
$repository->add($client);
|
||||
$resolver = new ClientConsoleResolver($repository, $repository, $findClient, $executor);
|
||||
$resolver = new ClientConsoleResolver($repository, $findClient, $executor);
|
||||
|
||||
// WHEN
|
||||
$found = $resolver->find($uuid7->toString());
|
||||
|
|
@ -197,7 +197,7 @@ describe('ClientConsoleResolver Unit Tests', function (): void {
|
|||
);
|
||||
|
||||
$repository->add($client);
|
||||
$resolver = new ClientConsoleResolver($repository, $repository, $findClient, $executor);
|
||||
$resolver = new ClientConsoleResolver($repository, $findClient, $executor);
|
||||
|
||||
// WHEN
|
||||
$found = $resolver->find('Unique App');
|
||||
|
|
@ -227,7 +227,7 @@ describe('ClientConsoleResolver Unit Tests', function (): void {
|
|||
);
|
||||
|
||||
$repository->add($client1, $client2);
|
||||
$resolver = new ClientConsoleResolver($repository, $repository, $findClient, $executor);
|
||||
$resolver = new ClientConsoleResolver($repository, $findClient, $executor);
|
||||
|
||||
// WHEN
|
||||
$found = $resolver->find('Payment Service');
|
||||
|
|
@ -239,7 +239,7 @@ describe('ClientConsoleResolver Unit Tests', function (): void {
|
|||
|
||||
it('returns null when input is empty or client not found', function () use ($repository, $findClient, $executor): void {
|
||||
// GIVEN
|
||||
$resolver = new ClientConsoleResolver($repository, $repository, $findClient, $executor);
|
||||
$resolver = new ClientConsoleResolver($repository, $findClient, $executor);
|
||||
|
||||
// WHEN & THEN
|
||||
expect($resolver->find(''))->toBeNull()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue