Fix foreign keys and deletion service

This commit is contained in:
Constantin Graf
2024-11-05 11:35:55 +01:00
committed by Constantin Graf
parent 4224fdd57e
commit 3b3f593080
8 changed files with 344 additions and 5 deletions

View File

@@ -144,6 +144,7 @@ class DeletionService
->get();
foreach ($members as $member) {
/** @var Member $member */
if ($member->role === Role::Owner->value && $member->organization->users()->count() > 1) {
throw new CanNotDeleteUserWhoIsOwnerOfOrganizationWithMultipleMembers;
}
@@ -154,10 +155,13 @@ class DeletionService
if ($member->role === Role::Owner->value) {
$this->deleteOrganization($member->organization, false, $user);
} else {
$this->memberService->makeMemberToPlaceholder($member);
$this->memberService->makeMemberToPlaceholder($member, false);
}
}
$user->accessTokens()->delete();
$user->authCodes()->delete();
// Note: Since the deletion of the profile photo is not reversible via a database rollback this needs to be done last
$user->deleteProfilePhoto();

View File

@@ -44,7 +44,7 @@ class MemberService
}
}
public function makeMemberToPlaceholder(Member $member): void
public function makeMemberToPlaceholder(Member $member, bool $makeSureUserHasAtLeastOneOrganization = true): void
{
$user = $member->user;
$placeholderUser = $user->replicate();
@@ -56,6 +56,8 @@ class MemberService
$member->save();
$this->userService->assignOrganizationEntitiesToDifferentMember($member->organization, $user, $placeholderUser, $member);
$this->userService->makeSureUserHasAtLeastOneOrganization($user);
if ($makeSureUserHasAtLeastOneOrganization) {
$this->userService->makeSureUserHasAtLeastOneOrganization($user);
}
}
}