public async Task <Guid> Handle(SendCodeCommand request, CancellationToken cancellationToken = default)
        {
            Guid result;
            var  code          = _utils.GenerateCode(_options.LowerBoundCode, _options.UpperBoundCode);
            var  identityExist = await _identityDbContext.Identities.FirstOrDefaultAsync(u => u.Phone.Equals(request.Phone), cancellationToken);

            if (identityExist != null)
            {
                identityExist.Code = code;
                result             = identityExist.Id;
            }
            else
            {
                var identity = new Identity {
                    Id    = Guid.NewGuid(),
                    Phone = request.Phone,
                    Code  = code
                };

                await _identityDbContext.Identities.AddAsync(identity, cancellationToken);

                result = identity.Id;
            }
            await _identityDbContext.SaveChangesAsync(cancellationToken);

            _messageProducer.Enqueue(new CodeGeneratedEvent
            {
                Code   = code,
                UserId = result
            }, new Dictionary <string, string>());

            return(result);
        }