Skip to content

Commit 1ef9b73

Browse files
authored
Merge pull request #483 from dotkernel/issue-482
account delete - avatar
2 parents 51d3dad + 16e2c68 commit 1ef9b73

File tree

6 files changed

+49
-12
lines changed

6 files changed

+49
-12
lines changed

src/User/src/ConfigProvider.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Frontend\User\Factory\AuthenticationAdapterFactory;
1717
use Frontend\User\Factory\AuthenticationServiceFactory;
1818
use Frontend\User\Form\LoginForm;
19+
use Frontend\User\Repository\UserAvatarRepository;
1920
use Frontend\User\Repository\UserRepository;
2021
use Frontend\User\Repository\UserRoleRepository;
2122
use Frontend\User\Service\UserRoleService;
@@ -54,6 +55,7 @@ public function getDependencies(): array
5455
UserService::class => AttributedServiceFactory::class,
5556
UserRoleService::class => AttributedServiceFactory::class,
5657
UserRepository::class => AttributedRepositoryFactory::class,
58+
UserAvatarRepository::class => AttributedRepositoryFactory::class,
5759
UserRoleRepository::class => AttributedRepositoryFactory::class,
5860
UserAvatarEventListener::class => AttributedServiceFactory::class,
5961
],

src/User/src/Controller/AccountController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ public function deleteAccountAction(): ResponseInterface
427427
$userData = $form->getData();
428428
try {
429429
$this->userService->updateUser($user, $userData);
430+
$this->userService->deleteAvatar($user);
430431
} catch (Exception $e) {
431432
$this->messenger->addData('shouldRebind', true);
432433
$this->forms->saveState($form);

src/User/src/Repository/UserAvatarRepository.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,18 @@
55
namespace Frontend\User\Repository;
66

77
use Doctrine\ORM\EntityRepository;
8+
use Dot\DependencyInjection\Attribute\Entity;
9+
use Frontend\User\Entity\UserAvatar;
810

911
/**
1012
* @extends EntityRepository<object>
1113
*/
14+
#[Entity(name: UserAvatar::class)]
1215
class UserAvatarRepository extends EntityRepository
1316
{
17+
public function deleteAvatar(UserAvatar $avatar): void
18+
{
19+
$this->getEntityManager()->remove($avatar);
20+
$this->getEntityManager()->flush();
21+
}
1422
}

src/User/src/Service/UserService.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Frontend\User\Entity\UserInterface;
2020
use Frontend\User\Entity\UserRememberMe;
2121
use Frontend\User\Entity\UserRole;
22+
use Frontend\User\Repository\UserAvatarRepository;
2223
use Frontend\User\Repository\UserRepository;
2324
use Frontend\User\Repository\UserRoleRepository;
2425
use Laminas\Diactoros\UploadedFile;
@@ -30,6 +31,7 @@
3031
use function is_readable;
3132
use function mkdir;
3233
use function password_hash;
34+
use function rmdir;
3335
use function sprintf;
3436
use function time;
3537
use function unlink;
@@ -50,6 +52,7 @@ class UserService implements UserServiceInterface
5052
UserRoleServiceInterface::class,
5153
TemplateRendererInterface::class,
5254
UserRepository::class,
55+
UserAvatarRepository::class,
5356
UserRoleRepository::class,
5457
"config",
5558
)]
@@ -59,6 +62,7 @@ public function __construct(
5962
protected UserRoleServiceInterface $userRoleService,
6063
protected TemplateRendererInterface $templateRenderer,
6164
protected UserRepository $userRepository,
65+
protected UserAvatarRepository $userAvatarRepository,
6266
protected UserRoleRepository $userRoleRepository,
6367
protected array $config = []
6468
) {
@@ -217,6 +221,20 @@ protected function createAvatar(User $user, UploadedFile $uploadedFile): UserAva
217221
return $avatar;
218222
}
219223

224+
public function deleteAvatar(User $user): void
225+
{
226+
$avatar = $user->getAvatar();
227+
if (! $avatar instanceof UserAvatar) {
228+
return;
229+
}
230+
231+
$path = sprintf('%s/%s/', $this->config['uploads']['user']['path'], $user->getUuid()->toString());
232+
$this->deleteAvatarFile($path . $avatar->getName());
233+
rmdir($path);
234+
235+
$this->userAvatarRepository->deleteAvatar($avatar);
236+
}
237+
220238
public function deleteAvatarFile(string $path): bool
221239
{
222240
if (empty($path)) {

src/User/src/Service/UserServiceInterface.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public function deleteExpiredRememberMeTokens(): void;
3434

3535
public function updateUser(User $user, array $data = []): UserInterface;
3636

37+
public function deleteAvatar(User $user): void;
38+
3739
public function deleteAvatarFile(string $path): bool;
3840

3941
public function exists(string $email = '', ?string $uuid = ''): bool;

test/Unit/User/Service/UserServiceTest.php

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Frontend\App\Common\Message;
1010
use Frontend\App\Service\CookieServiceInterface;
1111
use Frontend\User\Entity\User;
12+
use Frontend\User\Repository\UserAvatarRepository;
1213
use Frontend\User\Repository\UserRepository;
1314
use Frontend\User\Repository\UserRoleRepository;
1415
use Frontend\User\Service\UserRoleServiceInterface;
@@ -30,6 +31,7 @@ public function testWillInstantiate(): void
3031
$this->createMock(UserRoleServiceInterface::class),
3132
$this->createMock(TemplateRendererInterface::class),
3233
$this->createMock(UserRepository::class),
34+
$this->createMock(UserAvatarRepository::class),
3335
$this->createMock(UserRoleRepository::class),
3436
[]
3537
);
@@ -42,12 +44,13 @@ public function testWillInstantiate(): void
4244
*/
4345
public function testCreateUserThrowsDuplicateException(): void
4446
{
45-
$cookieService = $this->createMock(CookieServiceInterface::class);
46-
$mailService = $this->createMock(MailService::class);
47-
$userRoleService = $this->createMock(UserRoleServiceInterface::class);
48-
$template = $this->createMock(TemplateRendererInterface::class);
49-
$userRepository = $this->createMock(UserRepository::class);
50-
$userRoleRepository = $this->createMock(UserRoleRepository::class);
47+
$cookieService = $this->createMock(CookieServiceInterface::class);
48+
$mailService = $this->createMock(MailService::class);
49+
$userRoleService = $this->createMock(UserRoleServiceInterface::class);
50+
$template = $this->createMock(TemplateRendererInterface::class);
51+
$userRepository = $this->createMock(UserRepository::class);
52+
$userAvatarRepository = $this->createMock(UserAvatarRepository::class);
53+
$userRoleRepository = $this->createMock(UserRoleRepository::class);
5154

5255
$userRepository->expects($this->once())->method('exists')->willReturn(new User());
5356
$this->expectException(Exception::class);
@@ -59,6 +62,7 @@ public function testCreateUserThrowsDuplicateException(): void
5962
$userRoleService,
6063
$template,
6164
$userRepository,
65+
$userAvatarRepository,
6266
$userRoleRepository,
6367
[]
6468
);
@@ -71,12 +75,13 @@ public function testCreateUserThrowsDuplicateException(): void
7175
*/
7276
public function testCreateUserThrowsRestrictionRolesException(): void
7377
{
74-
$cookieService = $this->createMock(CookieServiceInterface::class);
75-
$mailService = $this->createMock(MailService::class);
76-
$userRoleService = $this->createMock(UserRoleServiceInterface::class);
77-
$template = $this->createMock(TemplateRendererInterface::class);
78-
$userRepository = $this->createMock(UserRepository::class);
79-
$userRoleRepository = $this->createMock(UserRoleRepository::class);
78+
$cookieService = $this->createMock(CookieServiceInterface::class);
79+
$mailService = $this->createMock(MailService::class);
80+
$userRoleService = $this->createMock(UserRoleServiceInterface::class);
81+
$template = $this->createMock(TemplateRendererInterface::class);
82+
$userRepository = $this->createMock(UserRepository::class);
83+
$userAvatarRepository = $this->createMock(UserAvatarRepository::class);
84+
$userRoleRepository = $this->createMock(UserRoleRepository::class);
8085

8186
$userRepository->expects($this->once())->method('exists')->willReturn(null);
8287
$this->expectException(Exception::class);
@@ -88,6 +93,7 @@ public function testCreateUserThrowsRestrictionRolesException(): void
8893
$userRoleService,
8994
$template,
9095
$userRepository,
96+
$userAvatarRepository,
9197
$userRoleRepository,
9298
[]
9399
);

0 commit comments

Comments
 (0)