public async Task <JsonDefaultResponse> Handle(CreateAccount request, CancellationToken cancellationToken)
        {
            try
            {
                var existentUser = await _context.User
                                   .Where(u => u.Username == request.Username)
                                   .SingleOrDefaultAsync();

                if (existentUser != null)
                {
                    return new JsonDefaultResponse
                           {
                               Success = false,
                               Message = "Já existe um usuário cadastrado com esse nome de usuário."
                           }
                }
                ;
            }
            catch
            {
                return(new JsonDefaultResponse
                {
                    Success = false,
                    Message = "Houve um problema ao consultar os usuários existentes."
                });
            }

            var user = new User
            {
                Username = request.Username,
                Password = _cryptoHelper.Encrypt(request.Password),
                Status   = Status.Active
            };

            var person = new Person
            {
                FirstName = request.FirstName,
                LastName  = request.LastName,
                Age       = request.Age,
                TaxNumber = request.TaxNumber,
                Gender    = request.Gender
            };

            var userHasPerson = new UserHasPerson
            {
                UserId   = user.Id,
                PersonId = person.Id
            };

            var contact = new Contact
            {
                PhoneNumber = request.PhoneNumber,
                Email       = request.PhoneNumber
            };

            var personHasContact = new PersonHasContact
            {
                PersonId  = person.Id,
                ContactId = contact.Id
            };

            var userImage = new UserImage
            {
                UserId = user.Id,
                Path   = request.ImagePath
            };

            try
            {
                _context.User.Add(user);
                _context.Person.Add(person);
                _context.UserHasPerson.Add(userHasPerson);
                _context.Contact.Add(contact);
                _context.PersonHasContact.Add(personHasContact);
                await _context.SaveChangesAsync(cancellationToken);
            }
            catch
            {
                return(new JsonDefaultResponse
                {
                    Success = false,
                    Message = "Houve um erro no servidor ao criar a sua conta"
                });
            }

            return(new JsonDefaultResponse
            {
                Success = true,
                Message = "Conta criada com sucesso."
            });
        }
        public async Task <JsonDefaultResponse> Handle(SignUp request, CancellationToken cancellationToken)
        {
            try
            {
                var existentUser = await _context.User
                                   .Where(u => u.Username == request.Username)
                                   .SingleOrDefaultAsync();

                if (existentUser != null)
                {
                    return new JsonDefaultResponse
                           {
                               Success = false,
                               Message = Resx.Strings.ErrorUserAlreadyExists
                           }
                }
                ;
            }
            catch (Exception ex)
            {
                return(new JsonDefaultResponse
                {
                    Success = false,
                    Message = string.Format($"{Resx.Strings.ErrorSearchingForUsers}: {ex.Message}.")
                });
            }

            var user = new User
            {
                Username = request.Username,
                Password = _cryptoHelper.Encrypt(request.Password),
                Status   = Status.Active
            };

            var person = new Person
            {
                FirstName = request.FirstName,
                LastName  = request.LastName,
                BirthDate = request.BirthDate,
                TaxNumber = request.TaxNumber,
                Gender    = request.Gender
            };

            var userHasPerson = new UserHasPerson
            {
                UserId   = user.Id,
                PersonId = person.Id
            };

            var contact = new Contact
            {
                PhoneNumber = request.PhoneNumber,
                Email       = request.Email
            };

            var personHasContact = new PersonHasContact
            {
                PersonId  = person.Id,
                ContactId = contact.Id
            };

            var userImage = new UserImage
            {
                UserId = user.Id,
                Path   = request.ImagePath
            };

            try
            {
                _context.User.Add(user);
                _context.Person.Add(person);
                _context.UserHasPerson.Add(userHasPerson);
                _context.Contact.Add(contact);
                _context.PersonHasContact.Add(personHasContact);
                await _context.SaveChangesAsync(cancellationToken);
            }
            catch (Exception ex)
            {
                return(new JsonDefaultResponse
                {
                    Success = false,
                    Message = string.Format($"{Resx.Strings.ErrorCreatingAccount}: {ex.Message}.")
                });
            }

            return(new JsonDefaultResponse
            {
                Success = true,
                Message = Resx.Strings.SuccessAccountCreation
            });
        }