2
respostas

Por que poder pegar mais de um parâmetro?

1)Qual outro parâmetro poderia vir sem ser um simples "id"?
2)Poderia vir mais de um "id"? Por exemplo, um id de um estudante e outro id de uma matrícula dele para poder atualizar a matrícula? Se sim, precisaria fazer uma parte de segurança para evitar que um estudante atualize a matrícula de outro estudante né? Quem deveria poder atualizar é somente o admin nem o próprio estudante pode né?
3)Poderia vir outra coisa sem ser o "id" como parâmetro? Se sim, oq? Dê um exemplo.

 async atualiza(req, res) {
    const { ...params } = req.params;
    const dadosAtualizados = req.body;

    const where = converteIds(params);
    try {
      //isUpdated
      const foiAtualizado = await this.entidadeService.atualizaRegistro(dadosAtualizados, where);
      if (!foiAtualizado) {
        return res.status(400).json({ mensagem: 'registro não foi atualizado' });
      }
      return res.status(200).json({ mensagem: 'Atualizado com sucesso' });
    } catch (erro) {
      return res.status(500).json({ erro: erro.message });
    }
  }

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas

Olá, Luidi! Tudo bem?

Vamos por partes para responder suas dúvidas sobre o uso de parâmetros no contexto do Sequelize e do Node.js.

Outro parâmetro além de "id": Sim, além de um simples "id", você pode usar outros parâmetros para identificar registros. Por exemplo, você pode usar um "email" ou "username" como identificador único para buscar ou atualizar registros. Isso depende de como seu banco de dados está estruturado e quais campos são únicos ou relevantes para suas operações.

Mais de um "id": É totalmente possível receber múltiplos "ids" como parâmetros. No seu exemplo, você poderia receber tanto o "id" do estudante quanto o "id" da matrícula. Isso é útil para operações que precisam de contexto adicional, como atualizar uma matrícula específica de um estudante específico. Sobre a segurança, você está correto.

É importante implementar verificações para garantir que um estudante não possa atualizar dados de outro estudante. Isso geralmente é feito verificando se o usuário autenticado tem permissão para realizar a operação. Normalmente, apenas administradores ou usuários com permissões específicas deveriam poder realizar certas atualizações.

Outros parâmetros além de "id": Além de "id", você pode usar qualquer outro campo que seja relevante para a operação que deseja realizar. Por exemplo, se você está atualizando informações de contato, você poderia usar um "email" como parâmetro. Outro exemplo seria usar um "status" para filtrar registros que precisam ser atualizados. Tudo depende da lógica de negócio que você está implementando.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Ola! você está raciocinando como alguém que já entende bem o funcionamento das rotas e parâmetros no Express!

Por que pegar mais de um parâmetro

O método atualiza usa esta linha:

const { ...params } = req.params;

Aqui, o operador ... está pegando todos os parâmetros de rota, não apenas um id.
Isso é útil porque nem todas as rotas têm apenas um parâmetro.
Por exemplo:

/pessoas/:estudante_id/matriculas/:matricula_id

Essa rota tem dois parâmetros:

  • estudante_id
  • matricula_id

O código const { ...params } = req.params permite lidar com ambos — independentemente de quantos sejam.

Sim, pode ter mais de um id

Sim! É comum ter mais de um id quando existe uma relação entre entidades.
No exemplo:

PUT /pessoas/:estudante_id/matriculas/:matricula_id
  • estudante_id identifica o estudante dono da matrícula.
  • matricula_id identifica a matrícula que será atualizada.

O controller pode usar ambos:

const where = { id: matricula_id, estudante_id };

Isso garante que você atualize apenas a matrícula que pertence àquele estudante.

Segurança — evitar acesso indevido

Correto: se o sistema tiver autenticação, é preciso verificar se:

  • O usuário logado é o administrador, ou
  • O usuário logado é o estudante dono daquela matrícula.

Isso pode ser feito antes da atualização, comparando o estudante_id da matrícula com o id do usuário autenticado.
Exemplo:

if (req.user.role !== 'admin' && req.user.id !== estudante_id) {
  return res.status(403).json({ mensagem: 'Acesso negado' });
}

Assim, um estudante não pode atualizar a matrícula de outro estudante, e somente o admin tem permissão total.

Pode haver parâmetros que não sejam “id”?

Sim! Os parâmetros de rota podem ser qualquer valor que identifique ou filtre algo.
Por exemplo:

  • /cursos/:categoria → parâmetro categoria
  • /professores/:nome → parâmetro nome
  • /alunos/:ano/matriculas → parâmetro ano

Esses parâmetros podem ser usados para filtrar resultados ou buscar registros específicos, sem depender só de números de id.

Abç;