private Result <UserPerson> InitiateAccout(CreatePersonAccountCommand request)
            {
                var curDate = _dateTime.Now;
                var result  = new UserPerson()
                {
                    UserId = request.Email ?? request.UserId,
                    Person = new Person()
                    {
                        FirstName    = request.FirstName,
                        LastName     = request.LastName,
                        ModifiedDate = curDate,
                    }
                };

                if (request.Email != null)
                {
                    result.Person.PersonContact = new[]
                    {
                        new PersonContact()
                        {
                            Name         = "Email",
                            Value        = request.Email,
                            Url          = $"mailto:{request.Email}",
                            ModifiedDate = curDate
                        }
                    };
                }
                return(result);
            }
            public async Task <Result <int> > Handle(CreatePersonAccountCommand request, CancellationToken cancellationToken)
            {
                await Task.Yield();

                return(GetExistingPersonId(request.UserId)
                       .OnFailureCompensate(() =>
                {
                    return InitiateAccout(request)
                    .Tap(i => _context.Add(i))
                    .Map(p =>
                    {
                        _context.SaveChanges();
                        return p.PersonId;
                    });
                }));
            }