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); }