public IHttpActionResult Register(RegisterModel registerModel) { var pessoa = _pessoaServico.BuscarPorId(registerModel.Pessoa.Id); var usuario = Servico.BuscarPorId(registerModel.Id); var senha = usuario != null && string.IsNullOrEmpty(registerModel.Senha) && string.IsNullOrEmpty(registerModel.FacebookId) ? usuario.Senha : registerModel.Senha; if (registerModel.Id <= 0 && pessoa == null) { pessoa = registerModel.Pessoa; pessoa.Id = _pessoaServico.SalvarComRetorno(registerModel.Pessoa); Servico.Register(pessoa, senha, registerModel.Id, registerModel.FacebookId); } else { _pessoaServico.ValidaPessoa(pessoa, registerModel.Id); // Merge cartao var cartoes = _cartaoServico.BuscarPor(x => x.Pessoa.Id.Equals(pessoa.Id)); pessoa.Cartoes = cartoes; // Merge endereco var enderecos = _enderecoServico.BuscarPor(x => x.Pessoa.Id.Equals(pessoa.Id)); pessoa.EnderecosEntrega = enderecos; _pessoaServico.Salvar(pessoa); foreach (var documento in pessoa.Documentos) { documento.Pessoa = pessoa; _documentoServico.Salvar(documento); } foreach (var contato in pessoa.Contatos) { contato.Contato.Pessoa = pessoa; _contatoServico.Salvar(contato.Contato); } Servico.Register(pessoa, senha, registerModel.Id, registerModel.FacebookId); } return(Created(new Uri(VirtualPathUtility.AppendTrailingSlash(Request.RequestUri.ToString().Replace(Request.RequestUri.AbsolutePath, "/api/client")) + registerModel.Pessoa.Id), registerModel.Pessoa.Id)); }