public async Task SendConfirmationEmail(SendConfirmationEmailRequestDto sendConfirmationEmailRequest, CancellationToken cancellationToken)
    {
        var user = await _userManager.FindByEmailAsync(sendConfirmationEmailRequest.Email);

        if (user is null)
        {
            throw new BadRequestException(nameof(ErrorStrings.UserNameNotFound));
        }

        if (await _userManager.IsEmailConfirmedAsync(user))
        {
            throw new BadRequestException(nameof(ErrorStrings.EmailAlreadyConfirmed));
        }

        await SendConfirmationEmail(sendConfirmationEmailRequest, user, cancellationToken);
    }
    private async Task SendConfirmationEmail(SendConfirmationEmailRequestDto sendConfirmationEmailRequest, User user, CancellationToken cancellationToken)
    {
        if ((DateTimeOffset.Now - user.ConfirmationEmailRequestedOn) < _appSettings.Value.IdentitySettings.ConfirmationEmailResendDelay)
        {
            throw new TooManyRequestsExceptions(nameof(ErrorStrings.WaitForConfirmationEmailResendDelay));
        }

        var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);

        var controller = RouteData.Values["controller"] !.ToString();

        var confirmationLink = Url.Action(nameof(ConfirmEmail), controller,
                                          new { user.Email, token },
                                          HttpContext.Request.Scheme);

        var assembly = typeof(Program).Assembly;

        var result = await _fluentEmail
                     .To(user.Email, user.DisplayName)
                     .Subject(EmailStrings.ConfirmationEmailSubject)
                     .UsingTemplateFromEmbedded("TodoTemplate.Api.Resources.EmailConfirmation.cshtml",
                                                new EmailConfirmationModel
        {
            ConfirmationLink = confirmationLink,
            HostUri          = new Uri($"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.PathBase}")
        }, assembly)
                     .SendAsync(cancellationToken);

        user.ConfirmationEmailRequestedOn = DateTimeOffset.Now;

        await _userManager.UpdateAsync(user);

        if (!result.Successful)
        {
            throw new ResourceValidationException(result.ErrorMessages.ToArray());
        }
    }