From 14ace8fdbf5b8728d191df7107cfd2b9e65117f3 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Mon, 15 Jul 2024 11:15:53 +0200 Subject: [PATCH] refs #422. Model change --- migrations/Version20240715084147.php | 43 ++++++++++++++++++++++++++++ src/Dto/Output/UserGroupOutput.php | 10 +++---- src/Dto/Output/UserOutput.php | 14 +++++---- src/Entity/User.php | 4 +-- src/Entity/UserGroup.php | 2 +- 5 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 migrations/Version20240715084147.php diff --git a/migrations/Version20240715084147.php b/migrations/Version20240715084147.php new file mode 100644 index 0000000..0db212c --- /dev/null +++ b/migrations/Version20240715084147.php @@ -0,0 +1,43 @@ +addSql('CREATE TABLE user_user_group (user_id INT NOT NULL, user_group_id INT NOT NULL, INDEX IDX_28657971A76ED395 (user_id), INDEX IDX_286579711ED93D47 (user_group_id), PRIMARY KEY(user_id, user_group_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE user_user_group ADD CONSTRAINT FK_28657971A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE user_user_group ADD CONSTRAINT FK_286579711ED93D47 FOREIGN KEY (user_group_id) REFERENCES user_group (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE user_group_user DROP FOREIGN KEY FK_3AE4BD51ED93D47'); + $this->addSql('ALTER TABLE user_group_user DROP FOREIGN KEY FK_3AE4BD5A76ED395'); + $this->addSql('DROP TABLE user_group_user'); + $this->addSql('ALTER TABLE hardware_profile CHANGE organizational_unit_id organizational_unit_id INT NOT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE TABLE user_group_user (user_group_id INT NOT NULL, user_id INT NOT NULL, INDEX IDX_3AE4BD5A76ED395 (user_id), INDEX IDX_3AE4BD51ED93D47 (user_group_id), PRIMARY KEY(user_group_id, user_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB COMMENT = \'\' '); + $this->addSql('ALTER TABLE user_group_user ADD CONSTRAINT FK_3AE4BD51ED93D47 FOREIGN KEY (user_group_id) REFERENCES user_group (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE user_group_user ADD CONSTRAINT FK_3AE4BD5A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE user_user_group DROP FOREIGN KEY FK_28657971A76ED395'); + $this->addSql('ALTER TABLE user_user_group DROP FOREIGN KEY FK_286579711ED93D47'); + $this->addSql('DROP TABLE user_user_group'); + $this->addSql('ALTER TABLE hardware_profile CHANGE organizational_unit_id organizational_unit_id INT DEFAULT NULL'); + } +} diff --git a/src/Dto/Output/UserGroupOutput.php b/src/Dto/Output/UserGroupOutput.php index 1b1308d..3892d4b 100644 --- a/src/Dto/Output/UserGroupOutput.php +++ b/src/Dto/Output/UserGroupOutput.php @@ -10,7 +10,7 @@ use Symfony\Component\Serializer\Annotation\Groups; #[Get(shortName: 'UserGroup')] final class UserGroupOutput extends AbstractOutput { - #[Groups(['user-group:read'])] + #[Groups(['user-group:read', 'user:read'])] public string $name; #[Groups(['user-group:read'])] @@ -20,10 +20,10 @@ final class UserGroupOutput extends AbstractOutput public bool $enabled; #[Groups(['user-group:read'])] - public \DateTime $createAt; + public \DateTime $createdAt; #[Groups(['user-group:read'])] - public ?string $createBy = null; + public ?string $createdBy = null; public function __construct(UserGroup $userGroup) { @@ -32,7 +32,7 @@ final class UserGroupOutput extends AbstractOutput $this->name = $userGroup->getName(); $this->permissions = $userGroup->getPermissions(); $this->enabled = $userGroup->isEnabled(); - $this->createAt = $userGroup->getCreatedAt(); - $this->createBy = $userGroup->getCreatedBy(); + $this->createdAt = $userGroup->getCreatedAt(); + $this->createdBy = $userGroup->getCreatedBy(); } } \ No newline at end of file diff --git a/src/Dto/Output/UserOutput.php b/src/Dto/Output/UserOutput.php index bd7088b..7960699 100644 --- a/src/Dto/Output/UserOutput.php +++ b/src/Dto/Output/UserOutput.php @@ -5,6 +5,7 @@ namespace App\Dto\Output; use ApiPlatform\Metadata\Get; use App\Entity\OrganizationalUnit; use App\Entity\User; +use App\Entity\UserGroup; use Symfony\Component\Serializer\Annotation\Groups; #[Get(shortName: 'User')] @@ -24,10 +25,10 @@ final class UserOutput extends AbstractOutput public array $userGroups; #[Groups(['user:read'])] - public \DateTime $createAt; + public \DateTime $createdAt; #[Groups(['user:read'])] - public ?string $createBy = null; + public ?string $createdBy = null; public function __construct(User $user) { @@ -36,13 +37,16 @@ final class UserOutput extends AbstractOutput $this->username = $user->getUsername(); $this->roles = $user->getRoles(); $this->enabled = $user->isEnabled(); - $this->userGroups = $user->getUserGroups()->toArray(); + + $this->userGroups = $user->getUserGroups()->map( + fn(UserGroup $userGroup) => new UserGroupOutput($userGroup) + )->toArray(); $this->allowedOrganizationalUnits = $user->getAllowedOrganizationalUnits()->map( fn(OrganizationalUnit $organizationalUnit) => new OrganizationalUnitOutput($organizationalUnit) )->toArray(); - $this->createAt = $user->getCreatedAt(); - $this->createBy = $user->getCreatedBy(); + $this->createdAt = $user->getCreatedAt(); + $this->createdBy = $user->getCreatedBy(); } } \ No newline at end of file diff --git a/src/Entity/User.php b/src/Entity/User.php index c186575..4b821ce 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -38,7 +38,7 @@ class User extends AbstractEntity implements UserInterface, PasswordAuthenticate /** * @var Collection */ - #[ORM\ManyToMany(targetEntity: UserGroup::class, mappedBy: 'users')] + #[ORM\ManyToMany(targetEntity: UserGroup::class, inversedBy: 'users')] private Collection $userGroups; /** @@ -160,7 +160,7 @@ class User extends AbstractEntity implements UserInterface, PasswordAuthenticate { if (!$this->userGroups->contains($userGroup)) { $this->userGroups->add($userGroup); - $userGroup->addUser($this); + } return $this; diff --git a/src/Entity/UserGroup.php b/src/Entity/UserGroup.php index a017aa9..03cef94 100644 --- a/src/Entity/UserGroup.php +++ b/src/Entity/UserGroup.php @@ -23,7 +23,7 @@ class UserGroup extends AbstractEntity /** * @var Collection */ - #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'userGroups')] + #[ORM\ManyToMany(targetEntity: User::class, mappedBy: 'userGroups')] private Collection $users; public function __construct()