Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Json serve adicionando somente o ID no banco mockado

Boa tarde a todos, estou com uma duvida que não tem muito a ver com o graphql e sim com o banco mock que estamos usando para simular o banco, quando dou um post para salvar os dados em user, ele retorna e salva somente o id no arquivo, meu codigo:

    async adicionaUser(user){
        const users = await this.get('/users');
        user.id = users.length + 1;
        
        const role = await this.get(`/roles?type=${user.role}`);
        console.log({...user, role: role[0].id});
        await this.post('users',{...user, role: role[0].id}).then(user => {console.log(user)});
        
        return({
            ...user,
            role: role[0]
        });
    }

Inseri um then() para ver o que estava retornando do post, e ali veio somente o ID mesmo sem os outros campos, ficando assim: http://localhost:3000/users:

[
    {
        "id": 2,
        "nome": "Ana Torre",
        "ativo": true,
        "email": "a@a.com",
        "role": 1
    },
    {
        "id": 2,
        "nome": "Gabriel Costa",
        "ativo": true,
        "email": "g@g.com",
        "role": 1
    },
    {
        "id": 3,
        "nome": "Flavia Lins",
        "ativo": true,
        "email": "f@f.com",
        "role": 1
    },
    {
        "id": 4,
        "nome": "Carlos Marques",
        "ativo": true,
        "email": "c@c.com",
        "role": 2
    },
    {
        "id": 5,
        "nome": "Silvia Souza",
        "ativo": true,
        "email": "s@s.com",
        "role": 2
    },
    {
        "id": 6,
        "nome": "Marcia Silva",
        "ativo": true,
        "email": "m@m.com",
        "role": 2
    },
    {
        "id": 7
    }
]

meu objeto {...user, role:role[0].id } está retorando assim:

{ nome: 'Rodrigo', ativo: true, email: 'r@r.com', role: 1, id: 8 }

Agradeço desde já pela ajuda!

3 respostas

Olá, Rodrigo

Pelo que entendi do seu código e da sua dúvida, parece que a função post está retornando apenas o ID do usuário que foi adicionado, em vez de retornar o usuário inteiro.

Vamos analisar o seguinte trecho do seu código:

await this.post('users',{...user, role: role[0].id}).then(user => {console.log(user)});

Neste trecho, você está fazendo uma requisição POST para a rota 'users' e passando o objeto {...user, role: role[0].id} como corpo da requisição. O problema parece estar na função post que, ao invés de retornar o objeto inteiro que foi adicionado, está retornando apenas o ID.

Sem ter acesso ao código da função post, fica um pouco mais difícil de identificar o problema com precisão, mas uma possibilidade é que a função post esteja configurada para retornar apenas o ID do objeto que foi adicionado.

Se a função post for uma função que você mesmo escreveu, eu sugiro que você revise o código dela para garantir que ela esteja retornando o objeto inteiro após a adição. Se a função post for parte de uma biblioteca ou framework que você está usando, eu sugiro que você consulte a documentação para entender o comportamento esperado dessa função.

Espero ter ajudado e bons estudos!

Boa tarde Otavio, primeiramente obrigado pela resposta. Vou compartilhar aqui a função, coloquei alguns consoles logs para avaliar cada passo dela:

async adicionaUser(user){
    console.log("parametro",user);
    const users = await this.get('/users');
    console.log("vindo do server", users);
    user.id = users.length + 1;

    const role = await this.get(`/roles?type=${user.role}`);
    const save = {...user, role: role[0].id};
    console.log("Objeto montado para salvar",save);
    await this.post('users',save).then(user => {console.log("depois de salvar",user)});

    return({
        ...user,
        role: role[0]
    });
}

Resposta obitida:

parametro { nome: 'Rodrigo', ativo: true, email: 'r@r.com', role: 'ESTUDANTE' }
vindo do server [
  { id: 2, nome: 'Ana Torre', ativo: true, email: 'a@a.com', role: 1 },
  {
    id: 2,
    nome: 'Gabriel Costa',
    ativo: true,
    email: 'g@g.com',
    role: 1
  },
  {
    id: 3,
    nome: 'Flavia Lins',
    ativo: true,
    email: 'f@f.com',
    role: 1
  },
  {
    id: 4,
    nome: 'Carlos Marques',
    ativo: true,
    email: 'c@c.com',
    role: 2
  },
  {
    id: 5,
    nome: 'Silvia Souza',
    ativo: true,
    email: 's@s.com',
    role: 2
  },
  {
    id: 6,
    nome: 'Marcia Silva',
    ativo: true,
    email: 'm@m.com',
    role: 2
  },
  { id: 7 }
]
Objeto montado para salvar { nome: 'Rodrigo', ativo: true, email: 'r@r.com', role: 1, id: 8 }
depois de salvar { id: 8 }

Pelo o que eu entendi, o objeto vem sempre com todos os dados, e no callback do post de salvamento ele me retorna somente o ID pois no arquivo do mock dos dados salva apenas o ID. Segue o arquivo após a tentativa de salvar o objeto:

{
  "users": [
    {
      "id": 2,
      "nome": "Ana Torre",
      "ativo": true,
      "email": "a@a.com",
      "role": 1
    },
    {
      "id": 2,
      "nome": "Gabriel Costa",
      "ativo": true,
      "email": "g@g.com",
      "role": 1
    },
    {
      "id": 3,
      "nome": "Flavia Lins",
      "ativo": true,
      "email": "f@f.com",
      "role": 1
    },
    {
      "id": 4,
      "nome": "Carlos Marques",
      "ativo": true,
      "email": "c@c.com",
      "role": 2
    },
    {
      "id": 5,
      "nome": "Silvia Souza",
      "ativo": true,
      "email": "s@s.com",
      "role": 2
    },
    {
      "id": 6,
      "nome": "Marcia Silva",
      "ativo": true,
      "email": "m@m.com",
      "role": 2
    },
    {
      "id": 7
    },
    {
      "id": 8
    }
  ],
  "roles": [
    {
      "id": 1,
      "type": "ESTUDANTE"
    },
    {
      "id": 2,
      "type": "DOCENTE"
    },
    {
      "id": 3,
      "type": "COORDENACAO"
    }
  ]
}
solução!

Descobri o problema, era a versão do apollo dataset que estava usando, eu instalei o @apollo/datasource-rest quando na verdade a professora usou o apollo-datasource-rest. Fiz a alteração e funcionou tudo normal. Obrigado por seu tempo Otávio.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software