Skip to content

Commit 6838111

Browse files
committed
feat: actor and roles - refactoring
1 parent 97fa9fd commit 6838111

10 files changed

Lines changed: 51 additions & 130 deletions

File tree

src/modules/IAM/Application/Command/RegisterActorHandler.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use Modules\IAM\Domain\Exception\ActorAlreadyExistsException;
1212
use Modules\IAM\Domain\Repository\AccountRepository;
1313
use Modules\IAM\Domain\Repository\ActorRepository;
14-
use Modules\IAM\Domain\Repository\RoleRepository;
1514
use Modules\IAM\Domain\Service\GuestGateway;
1615
use Modules\IAM\Domain\Service\PasswordHasher;
1716
use Modules\IAM\Domain\ValueObject\RoleName;
@@ -23,7 +22,6 @@
2322
public function __construct(
2423
private ActorRepository $repository,
2524
private AccountRepository $accountRepository,
26-
private RoleRepository $roleRepository,
2725
private PasswordHasher $hasher,
2826
private GuestGateway $guestGateway,
2927
private TenantContext $tenantContext,
@@ -59,7 +57,7 @@ public function handle(RegisterActor $command): ActorId
5957
);
6058

6159
// Get the guest role
62-
$guestRole = $this->roleRepository->findByName(RoleName::GUEST);
60+
$guestRole = $this->repository->findRoleByName(RoleName::GUEST);
6361

6462
$id = $this->repository->nextIdentity();
6563

src/modules/IAM/Domain/Repository/ActorRepository.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Modules\IAM\Domain\Actor;
88
use Modules\IAM\Domain\ActorId;
9+
use Modules\IAM\Domain\Role;
10+
use Modules\IAM\Domain\RoleId;
11+
use Modules\IAM\Domain\ValueObject\RoleName;
912

1013
interface ActorRepository
1114
{
@@ -16,4 +19,10 @@ public function findByUuid(ActorId $uuid): ?Actor;
1619
public function findByEmail(string $email): ?Actor;
1720

1821
public function nextIdentity(): ActorId;
22+
23+
public function saveRole(Role $role): void;
24+
25+
public function findRoleByName(RoleName $name): ?Role;
26+
27+
public function nextRoleIdentity(): RoleId;
1928
}

src/modules/IAM/Domain/Repository/RoleRepository.php

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/modules/IAM/Infrastructure/Persistence/Eloquent/EloquentActorRepository.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,33 @@ public function nextIdentity(): ActorId
7878
return ActorId::generate();
7979
}
8080

81+
public function saveRole(Role $role): void
82+
{
83+
RoleModel::query()->updateOrInsert(
84+
['uuid' => $role->uuid->value],
85+
['name' => $role->name->value],
86+
);
87+
}
88+
89+
public function findRoleByName(RoleName $name): ?Role
90+
{
91+
$record = RoleModel::where('name', $name->value)->first();
92+
93+
if (! $record) {
94+
return null;
95+
}
96+
97+
return Role::create(
98+
uuid: RoleId::fromString($record->uuid),
99+
name: RoleName::from($record->name),
100+
);
101+
}
102+
103+
public function nextRoleIdentity(): RoleId
104+
{
105+
return RoleId::generate();
106+
}
107+
81108
/** @return list<Role> */
82109
private function loadRoles(int $actorId): array
83110
{

src/modules/IAM/Infrastructure/Persistence/Eloquent/EloquentRoleRepository.php

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/modules/IAM/Infrastructure/Persistence/RoleReflector.php

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/modules/IAM/Infrastructure/Persistence/Seeders/ActorSeeder.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@
1111
use Modules\IAM\Domain\AccountId;
1212
use Modules\IAM\Domain\Actor;
1313
use Modules\IAM\Domain\Repository\ActorRepository;
14-
use Modules\IAM\Domain\Repository\RoleRepository;
1514
use Modules\IAM\Domain\Service\PasswordHasher;
1615
use Modules\IAM\Domain\ValueObject\RoleName;
1716

1817
class ActorSeeder extends Seeder
1918
{
2019
public function __construct(
2120
private readonly ActorRepository $repository,
22-
private readonly RoleRepository $roleRepository,
2321
private readonly PasswordHasher $hasher,
2422
) {}
2523

@@ -32,7 +30,7 @@ public function run(): void
3230

3331
private function seedSuperAdmins(): void
3432
{
35-
$superadminRole = $this->roleRepository->findByName(RoleName::SUPERADMIN);
33+
$superadminRole = $this->repository->findRoleByName(RoleName::SUPERADMIN);
3634

3735
$superadmins = [
3836
['Super Admin', 'superadmin@guesthub.com'],
@@ -61,7 +59,7 @@ private function seedSuperAdmins(): void
6159

6260
private function seedAdmins(): void
6361
{
64-
$adminRole = $this->roleRepository->findByName(RoleName::ADMIN);
62+
$adminRole = $this->repository->findRoleByName(RoleName::ADMIN);
6563
$accountId = AccountId::fromString(AccountSeeder::$defaultAccountUuid);
6664

6765
$admins = [
@@ -92,7 +90,7 @@ private function seedAdmins(): void
9290

9391
private function seedGuests(): void
9492
{
95-
$guestRole = $this->roleRepository->findByName(RoleName::GUEST);
93+
$guestRole = $this->repository->findRoleByName(RoleName::GUEST);
9694
$accountId = AccountId::fromString(AccountSeeder::$defaultAccountUuid);
9795
$guestIds = GuestSeeder::$guestIds;
9896

src/modules/IAM/Infrastructure/Persistence/Seeders/RoleSeeder.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,31 @@
55
namespace Modules\IAM\Infrastructure\Persistence\Seeders;
66

77
use Illuminate\Database\Seeder;
8-
use Modules\IAM\Domain\Repository\RoleRepository;
8+
use Modules\IAM\Domain\Repository\ActorRepository;
99
use Modules\IAM\Domain\Role;
1010
use Modules\IAM\Domain\ValueObject\RoleName;
1111

1212
class RoleSeeder extends Seeder
1313
{
1414
public function __construct(
15-
private readonly RoleRepository $repository,
15+
private readonly ActorRepository $repository,
1616
) {}
1717

1818
public function run(): void
1919
{
2020
foreach (RoleName::cases() as $roleName) {
21-
$existing = $this->repository->findByName($roleName);
21+
$existing = $this->repository->findRoleByName($roleName);
2222

2323
if ($existing !== null) {
2424
continue;
2525
}
2626

2727
$role = Role::create(
28-
uuid: $this->repository->nextIdentity(),
28+
uuid: $this->repository->nextRoleIdentity(),
2929
name: $roleName,
3030
);
3131

32-
$this->repository->save($role);
32+
$this->repository->saveRole($role);
3333
}
3434
}
3535
}

src/modules/IAM/Infrastructure/Providers/IAMServiceProvider.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@
88
use Illuminate\Support\ServiceProvider;
99
use Modules\IAM\Domain\Repository\AccountRepository;
1010
use Modules\IAM\Domain\Repository\ActorRepository;
11-
use Modules\IAM\Domain\Repository\RoleRepository;
1211
use Modules\IAM\Domain\Service\GuestGateway;
1312
use Modules\IAM\Domain\Service\PasswordHasher;
1413
use Modules\IAM\Domain\Service\TokenManager;
1514
use Modules\IAM\Infrastructure\Integration\GuestGatewayAdapter;
1615
use Modules\IAM\Infrastructure\Persistence\Eloquent\EloquentAccountRepository;
1716
use Modules\IAM\Infrastructure\Persistence\Eloquent\EloquentActorRepository;
18-
use Modules\IAM\Infrastructure\Persistence\Eloquent\EloquentRoleRepository;
1917
use Modules\IAM\Infrastructure\Services\BcryptPasswordHasher;
2018
use Modules\IAM\Infrastructure\Services\SanctumTokenManager;
2119

@@ -25,7 +23,6 @@ public function register(): void
2523
{
2624
$this->app->bind(ActorRepository::class, EloquentActorRepository::class);
2725
$this->app->bind(AccountRepository::class, EloquentAccountRepository::class);
28-
$this->app->bind(RoleRepository::class, EloquentRoleRepository::class);
2926
$this->app->bind(TokenManager::class, SanctumTokenManager::class);
3027
$this->app->bind(PasswordHasher::class, BcryptPasswordHasher::class);
3128
$this->app->bind(GuestGateway::class, GuestGatewayAdapter::class);

src/tests/Integration/IAM/EloquentActorRepositoryTest.php

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use Modules\IAM\Domain\ActorId;
1717
use Modules\IAM\Domain\Repository\AccountRepository;
1818
use Modules\IAM\Domain\Repository\ActorRepository;
19-
use Modules\IAM\Domain\Repository\RoleRepository;
2019
use Modules\IAM\Domain\Role;
2120
use Modules\IAM\Domain\ValueObject\HashedPassword;
2221
use Modules\IAM\Domain\ValueObject\RoleName;
@@ -48,12 +47,11 @@ protected function setUp(): void
4847
$this->repository = $this->app->make(ActorRepository::class);
4948

5049
// Seed roles
51-
$roleRepository = $this->app->make(RoleRepository::class);
52-
$this->guestRole = Role::create(uuid: $roleRepository->nextIdentity(), name: RoleName::GUEST);
53-
$roleRepository->save($this->guestRole);
50+
$this->guestRole = Role::create(uuid: $this->repository->nextRoleIdentity(), name: RoleName::GUEST);
51+
$this->repository->saveRole($this->guestRole);
5452

55-
$this->adminRole = Role::create(uuid: $roleRepository->nextIdentity(), name: RoleName::ADMIN);
56-
$roleRepository->save($this->adminRole);
53+
$this->adminRole = Role::create(uuid: $this->repository->nextRoleIdentity(), name: RoleName::ADMIN);
54+
$this->repository->saveRole($this->adminRole);
5755

5856
// Seed account
5957
$accountRepository = $this->app->make(AccountRepository::class);
@@ -184,9 +182,8 @@ public function it_generates_unique_identities(): void
184182
#[Test]
185183
public function it_saves_super_admin_with_null_account(): void
186184
{
187-
$roleRepository = $this->app->make(\Modules\IAM\Domain\Repository\RoleRepository::class);
188-
$superadminRole = Role::create(uuid: $roleRepository->nextIdentity(), name: RoleName::SUPERADMIN);
189-
$roleRepository->save($superadminRole);
185+
$superadminRole = Role::create(uuid: $this->repository->nextRoleIdentity(), name: RoleName::SUPERADMIN);
186+
$this->repository->saveRole($superadminRole);
190187

191188
$actor = Actor::register(
192189
uuid: $this->repository->nextIdentity(),

0 commit comments

Comments
 (0)