diff --git a/backend/app/User/UseCases/PromoteUserToAdmin/PromoteUserToAdmin.php b/backend/app/User/UseCases/PromoteUserToAdmin/PromoteUserToAdmin.php new file mode 100644 index 0000000..23e6dee --- /dev/null +++ b/backend/app/User/UseCases/PromoteUserToAdmin/PromoteUserToAdmin.php @@ -0,0 +1,53 @@ +requesterIsAdmin) { + throw new ForbiddenException( + 'only admins can promote users' + ); + } + if ($request->targetUserId <= 0) { + throw new BadRequestException( + 'targetUserId must be positive' + ); + } + + $target = $this->userRepo->find($request->targetUserId); + if ($target === null) { + throw new DomainException('user not found'); + } + + if ($target->isAdmin()) { + return $target; + } + + return $this->userRepo->update(new User( + id: $target->getId(), + email: $target->getEmail(), + displayName: $target->getDisplayName(), + passwordHash: $target->getPasswordHash(), + isAdmin: true, + emailConfirmedAt: $target->getEmailConfirmedAt(), + )); + } +} diff --git a/backend/app/User/UseCases/PromoteUserToAdmin/PromoteUserToAdminRequest.php b/backend/app/User/UseCases/PromoteUserToAdmin/PromoteUserToAdminRequest.php new file mode 100644 index 0000000..8728ea3 --- /dev/null +++ b/backend/app/User/UseCases/PromoteUserToAdmin/PromoteUserToAdminRequest.php @@ -0,0 +1,11 @@ +