userRepository->get(UserId::fromString((string) $event->userId)); $token = ActivationToken::generate( userId: (string) $event->userId, email: $event->email, tenantId: $event->tenantId, role: $event->role, schoolName: $user->schoolName, createdAt: $this->clock->now(), ); $this->tokenRepository->save($token); $roleEnum = Role::tryFrom($event->role); $roleLabel = $roleEnum?->label() ?? $event->role; $activationUrl = $this->tenantUrlBuilder->build($event->tenantId, '/activate/' . $token->tokenValue); $html = $this->twig->render('emails/invitation.html.twig', [ 'firstName' => $event->firstName, 'lastName' => $event->lastName, 'role' => $roleLabel, 'activationUrl' => $activationUrl, ]); $email = (new Email()) ->from($this->fromEmail) ->to($event->email) ->subject('Invitation à rejoindre Classeo') ->html($html); $this->mailer->send($email); } }