Skip to content

Commit 610d458

Browse files
committed
Core sync
Signed-off-by: alexmerlin <[email protected]>
1 parent 2ceadee commit 610d458

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+687
-68
lines changed

src/Admin/src/Adapter/AuthenticationAdapter.php

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

77
use Core\Admin\Entity\Admin;
88
use Core\Admin\Entity\AdminIdentity;
9-
use Core\Admin\Entity\AdminRole;
9+
use Core\App\Entity\RoleInterface;
1010
use Doctrine\ORM\EntityManagerInterface;
1111
use Doctrine\ORM\Exception\ORMException;
1212
use Dot\DependencyInjection\Attribute\Inject;
@@ -139,7 +139,7 @@ public function authenticate(): Result
139139
$identityClass->getUuid()->toString(),
140140
$identityClass->getIdentity(),
141141
$identityClass->getStatus(),
142-
array_map(fn (AdminRole $role): string => $role->getName()->value, $identityClass->getRoles()),
142+
array_map(fn (RoleInterface $role): string => $role->getName()->value, $identityClass->getRoles()),
143143
[
144144
'firstName' => $identityClass->getFirstName(),
145145
'lastName' => $identityClass->getLastName(),

src/Core/src/Admin/src/ConfigProvider.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,35 @@
1010
use Core\Admin\Repository\AdminRepository;
1111
use Core\Admin\Repository\AdminRoleRepository;
1212
use Doctrine\ORM\Mapping\Driver\AttributeDriver;
13+
use Doctrine\Persistence\Mapping\Driver\MappingDriver;
1314
use Dot\DependencyInjection\Factory\AttributedRepositoryFactory;
1415

16+
/**
17+
* @phpstan-type DoctrineConfigType array{
18+
* driver: array{
19+
* orm_default: array{
20+
* drivers: array<non-empty-string, non-empty-string>,
21+
* },
22+
* AdminEntities: array{
23+
* class: class-string<MappingDriver>,
24+
* cache: non-empty-string,
25+
* paths: non-empty-string[],
26+
* },
27+
* },
28+
* types: array<non-empty-string, class-string>,
29+
* }
30+
* @phpstan-type DependenciesType array{
31+
* factories: array<class-string, class-string>,
32+
* }
33+
*/
1534
class ConfigProvider
1635
{
36+
/**
37+
* @return array{
38+
* dependencies: DependenciesType,
39+
* doctrine: DoctrineConfigType,
40+
* }
41+
*/
1742
public function __invoke(): array
1843
{
1944
return [
@@ -22,6 +47,9 @@ public function __invoke(): array
2247
];
2348
}
2449

50+
/**
51+
* @return DependenciesType
52+
*/
2553
private function getDependencies(): array
2654
{
2755
return [
@@ -33,6 +61,9 @@ private function getDependencies(): array
3361
];
3462
}
3563

64+
/**
65+
* @return DoctrineConfigType
66+
*/
3667
private function getDoctrineConfig(): array
3768
{
3869
return [

src/Core/src/Admin/src/Entity/Admin.php

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@
1111
use Core\App\Entity\RoleInterface;
1212
use Core\App\Entity\TimestampsTrait;
1313
use Core\Setting\Entity\Setting;
14+
use DateTimeImmutable;
1415
use Doctrine\Common\Collections\ArrayCollection;
1516
use Doctrine\Common\Collections\Collection;
1617
use Doctrine\ORM\Mapping as ORM;
1718
use League\OAuth2\Server\Entities\UserEntityInterface;
1819

1920
use function array_map;
2021

22+
/**
23+
* @phpstan-import-type RoleType from RoleInterface
24+
*/
2125
#[ORM\Entity(repositoryClass: AdminRepository::class)]
2226
#[ORM\Table(name: 'admin')]
2327
#[ORM\HasLifecycleCallbacks]
@@ -26,6 +30,7 @@ class Admin extends AbstractEntity implements UserEntityInterface
2630
use PasswordTrait;
2731
use TimestampsTrait;
2832

33+
/** @var non-empty-string|null $identity */
2934
#[ORM\Column(name: 'identity', type: 'string', length: 191, unique: true)]
3035
protected ?string $identity = null;
3136

@@ -45,12 +50,14 @@ enumType: AdminStatusEnum::class,
4550
)]
4651
protected AdminStatusEnum $status = AdminStatusEnum::Active;
4752

53+
/** @var Collection<int, RoleInterface> $roles */
4854
#[ORM\ManyToMany(targetEntity: AdminRole::class)]
4955
#[ORM\JoinTable(name: 'admin_roles')]
5056
#[ORM\JoinColumn(name: 'userUuid', referencedColumnName: 'uuid')]
5157
#[ORM\InverseJoinColumn(name: 'roleUuid', referencedColumnName: 'uuid')]
5258
protected Collection $roles;
5359

60+
/** @var Collection<int, Setting> $settings */
5461
#[ORM\OneToMany(targetEntity: Setting::class, mappedBy: 'admin')]
5562
protected Collection $settings;
5663

@@ -73,6 +80,9 @@ public function hasIdentity(): bool
7380
return $this->identity !== null;
7481
}
7582

83+
/**
84+
* @param non-empty-string $identity
85+
*/
7686
public function setIdentity(string $identity): self
7787
{
7888
$this->identity = $identity;
@@ -128,14 +138,22 @@ public function setStatus(AdminStatusEnum $status): self
128138
return $this;
129139
}
130140

141+
/**
142+
* @return RoleInterface[]
143+
*/
131144
public function getRoles(): array
132145
{
133146
return $this->roles->toArray();
134147
}
135148

136-
public function setRoles(ArrayCollection $roles): self
149+
/**
150+
* @param RoleInterface[] $roles
151+
*/
152+
public function setRoles(array $roles): self
137153
{
138-
$this->roles = $roles;
154+
foreach ($roles as $role) {
155+
$this->roles->add($role);
156+
}
139157

140158
return $this;
141159
}
@@ -196,9 +214,21 @@ public function isActive(): bool
196214

197215
public function getIdentifier(): string
198216
{
199-
return $this->identity;
200-
}
201-
217+
return (string) $this->identity;
218+
}
219+
220+
/**
221+
* @return array{
222+
* uuid: non-empty-string,
223+
* identity: non-empty-string|null,
224+
* firstName: string|null,
225+
* lastName: string|null,
226+
* status: non-empty-string,
227+
* roles: iterable<RoleType>,
228+
* created: DateTimeImmutable,
229+
* updated: DateTimeImmutable|null,
230+
* }
231+
*/
202232
public function getArrayCopy(): array
203233
{
204234
return [
@@ -207,7 +237,7 @@ public function getArrayCopy(): array
207237
'firstName' => $this->firstName,
208238
'lastName' => $this->lastName,
209239
'status' => $this->status->value,
210-
'roles' => array_map(fn (AdminRole $role): array => $role->getArrayCopy(), $this->roles->toArray()),
240+
'roles' => array_map(fn (RoleInterface $role): array => $role->getArrayCopy(), $this->roles->toArray()),
211241
'created' => $this->created,
212242
'updated' => $this->updated,
213243
];

src/Core/src/Admin/src/Entity/AdminIdentity.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@
99

1010
class AdminIdentity implements UserInterface
1111
{
12+
/**
13+
* @param non-empty-string[] $roles
14+
* @param array<non-empty-string, non-empty-string> $details
15+
*/
1216
public function __construct(
1317
public string $uuid,
1418
public string $identity,
1519
public AdminStatusEnum $status,
1620
public array $roles = [],
17-
public array $details = []
21+
public array $details = [],
1822
) {
1923
}
2024

src/Core/src/Admin/src/Entity/AdminLogin.php

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Core\App\Entity\TimestampsTrait;
1010
use Core\App\Enum\SuccessFailureEnum;
1111
use Core\App\Enum\YesNoEnum;
12+
use DateTimeImmutable;
1213
use Doctrine\ORM\Mapping as ORM;
1314

1415
#[ORM\Entity(repositoryClass: AdminLoginRepository::class)]
@@ -43,7 +44,7 @@ class AdminLogin extends AbstractEntity
4344
protected ?string $deviceModel = null;
4445

4546
#[ORM\Column(type: 'yes_no_enum', nullable: true, enumType: YesNoEnum::class)]
46-
protected ?YesNoEnum $isMobile = null;
47+
protected YesNoEnum $isMobile = YesNoEnum::No;
4748

4849
#[ORM\Column(name: 'osName', type: 'string', length: 191, nullable: true)]
4950
protected ?string $osName = null;
@@ -67,7 +68,14 @@ class AdminLogin extends AbstractEntity
6768
protected ?string $clientVersion = null;
6869

6970
#[ORM\Column(type: 'success_failure_enum', nullable: true, enumType: SuccessFailureEnum::class)]
70-
protected ?SuccessFailureEnum $loginStatus = null;
71+
protected SuccessFailureEnum $loginStatus = SuccessFailureEnum::Fail;
72+
73+
public function __construct()
74+
{
75+
parent::__construct();
76+
77+
$this->created();
78+
}
7179

7280
public function getIdentity(): ?string
7381
{
@@ -170,7 +178,7 @@ public function getIsMobile(): ?YesNoEnum
170178
return $this->isMobile;
171179
}
172180

173-
public function setIsMobile(?YesNoEnum $isMobile): self
181+
public function setIsMobile(YesNoEnum $isMobile): self
174182
{
175183
$this->isMobile = $isMobile;
176184

@@ -266,13 +274,37 @@ public function getLoginStatus(): ?SuccessFailureEnum
266274
return $this->loginStatus;
267275
}
268276

269-
public function setLoginStatus(?SuccessFailureEnum $loginStatus): self
277+
public function setLoginStatus(SuccessFailureEnum $loginStatus): self
270278
{
271279
$this->loginStatus = $loginStatus;
272280

273281
return $this;
274282
}
275283

284+
/**
285+
* @return array{
286+
* uuid: non-empty-string,
287+
* identity: string|null,
288+
* adminIp: string|null,
289+
* country: string|null,
290+
* continent: string|null,
291+
* organization: string|null,
292+
* deviceType: string|null,
293+
* deviceBrand: string|null,
294+
* deviceModel: string|null,
295+
* isMobile: string,
296+
* osName: string|null,
297+
* osVersion: string|null,
298+
* osPlatform: string|null,
299+
* clientType: string|null,
300+
* clientName: string|null,
301+
* clientEngine: string|null,
302+
* clientVersion: string|null,
303+
* loginStatus: string,
304+
* created: DateTimeImmutable,
305+
* updated: DateTimeImmutable|null,
306+
* }
307+
*/
276308
public function getArrayCopy(): array
277309
{
278310
return [

src/Core/src/Admin/src/Entity/AdminRole.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
use Core\App\Entity\TimestampsTrait;
1313
use Doctrine\ORM\Mapping as ORM;
1414

15+
/**
16+
* @phpstan-import-type RoleType from RoleInterface
17+
*/
1518
#[ORM\Entity(repositoryClass: AdminRoleRepository::class)]
1619
#[ORM\Table(name: 'admin_role')]
1720
#[ORM\HasLifecycleCallbacks]
@@ -50,6 +53,9 @@ public function setName(BackedEnum $name): self
5053
return $this;
5154
}
5255

56+
/**
57+
* @return RoleType
58+
*/
5359
public function getArrayCopy(): array
5460
{
5561
return [

src/Core/src/Admin/src/Enum/AdminRoleEnum.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ enum AdminRoleEnum: string
1111
case Admin = 'admin';
1212
case Superuser = 'superuser';
1313

14+
/**
15+
* @return non-empty-string[]
16+
*/
1417
public static function values(): array
1518
{
1619
return array_column(self::cases(), 'value');

src/Core/src/Admin/src/Enum/AdminStatusEnum.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,17 @@ enum AdminStatusEnum: string
1212
case Active = 'active';
1313
case Inactive = 'inactive';
1414

15+
/**
16+
* @return non-empty-string[]
17+
*/
1518
public static function values(): array
1619
{
1720
return array_column(self::cases(), 'value');
1821
}
1922

23+
/**
24+
* @return array<string, non-empty-string>
25+
*/
2026
public static function toArray(): array
2127
{
2228
return array_reduce(self::cases(), function (array $collector, self $enum): array {

src/Core/src/Admin/src/Repository/AdminLoginRepository.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
#[Entity(AdminLogin::class)]
1818
class AdminLoginRepository extends AbstractRepository
1919
{
20+
/**
21+
* @return non-empty-string[]
22+
*/
2023
public function getAdminLoginIdentities(): array
2124
{
2225
$results = $this->getQueryBuilder()
@@ -28,6 +31,10 @@ public function getAdminLoginIdentities(): array
2831
return array_column($results, 'identity');
2932
}
3033

34+
/**
35+
* @param array<non-empty-string, mixed> $params
36+
* @param array<non-empty-string, mixed> $filters
37+
*/
3138
public function getAdminLogins(array $params = [], array $filters = []): QueryBuilder
3239
{
3340
$queryBuilder = $this

src/Core/src/Admin/src/Repository/AdminRepository.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
#[Entity(name: Admin::class)]
1717
class AdminRepository extends AbstractRepository
1818
{
19+
/**
20+
* @param array<non-empty-string, mixed> $params
21+
* @param array<non-empty-string, mixed> $filters
22+
*/
1923
public function getAdmins(array $params = [], array $filters = []): QueryBuilder
2024
{
2125
$queryBuilder = $this

0 commit comments

Comments
 (0)