1
resposta

Usar o estudanteId da requiseção

Conversei com a Luri sobre trazer o estudanteId pelos parâmetros da requisição e não pelo corpo, já que poderiamos ter a rota "/pessoas/1/matricula" e ainda sim passar "studantId" como 2. Abaixo está minha conversa com ela para auxiliar quem quiser fazer essa implementação também Nossa Conversa sobre Rotas e Matrículas Você: Mas eu poderia pegar o ID do estudante pelo parâmetro da requisão, deixando o código mais robusto, não?

Luri: Que ideia ótima! Você está pensando em deixar o código mais flexível e reutilizável, e isso é fundamental para um bom desenvolvimento.

Sim, você pode pegar o ID do estudante diretamente do parâmetro da requisição, ao invés de hardcodar o valor "1" na rota. Isso tornaria a rota mais dinâmica e permitiria que você criasse matrículas para qualquer estudante, sem precisar modificar a rota.

Para fazer isso, você pode usar o req.params.estudanteId dentro da sua rota.

Dica: Lembre-se de que o req.params é um objeto que contém todos os parâmetros da rota. Você pode acessar o valor do parâmetro estudanteId usando a notação de ponto (req.params.estudanteId).

Tente implementar essa mudança na sua rota e me conte como foi!

Você: Mas nesse caso eu não poderia usar o controlador geral, já que ele espera que todos meus dados venham do body, correto?

Luri: Você está absolutamente certa! Percebi que a sua dúvida é crucial.

O criaNovo() do Controller.js foi projetado para receber os dados do corpo da requisição (req.body). Se você quiser pegar o estudanteId da rota, precisaria adaptar o criaNovo() para receber esse parâmetro também.

Pense comigo:

Opção 1: Adaptar o criaNovo() do Controller.js: Você poderia modificar o método criaNovo() para receber um parâmetro adicional, como estudanteId, e usar esse parâmetro na lógica de criação. Essa seria uma solução mais geral, mas exigiria que você alterasse o código do Controller.js, o que pode ter implicações em outras partes do seu projeto.

Opção 2: Criar um método específico para a rota de matrícula: Você poderia criar um novo método no MatriculaController.js chamado, por exemplo, criaMatriculaPorEstudante(), que receberia o estudanteId como parâmetro da rota e os demais dados do corpo da requisição. Essa seria uma solução mais específica para a rota de matrícula, mas manteria o Controller.js intacto.

Qual das opções você acha que seria mais adequada para o seu caso?

Lembre-se que a escolha depende do seu contexto e do que você considera mais organizado e sustentável para o seu projeto.

Você: Com certeza a opção 2, nesse caso eu crio um método como você explicou e para criar efetivamente, eu chamo a função criaNovo() do super, correto?

Luri: Você está no caminho certo! A opção 2 é a mais adequada nesse caso, pois mantém a estrutura do Controller.js e garante que a lógica específica da matrícula seja tratada no MatriculaController.js.

E você acertou em cheio: para criar a matrícula, você pode usar o método criaNovo() do Controller.js como base.

Pense comigo:

Crie o método criaMatriculaPorEstudante() no MatriculaController.js: Esse método receberá o estudanteId como parâmetro da rota e os demais dados da matrícula do corpo da requisição (req.body).

Utilize o super.criaNovo() para criar a matrícula: Dentro do criaMatriculaPorEstudante(), você pode usar super.criaNovo() para executar a lógica de criação da matrícula, passando os dados do corpo da requisição e o estudanteId como parâmetros.

Exemplo:

javascript Copiar código // MatriculaController.js

class MatriculaController extends Controller {
  async criaMatriculaPorEstudante(req, res) {
    const { estudanteId } = req.params;
    const dadosDaMatricula = req.body;

    // Adicione aqui qualquer validação específica para a matrícula

    try {
      const novaMatricula = await super.criaNovo(dadosDaMatricula, estudanteId); // Passa o estudanteId como parâmetro
      res.status(201).json(novaMatricula);
    } catch (error) {
      res.status(500).json({ error: error.message });
    }
  }
}

Lembre-se:

Você pode adicionar validações específicas para a matrícula dentro do `criaMatriculaPorEstudante()

1 resposta

Olá Lucas! Tudo bem?

Que bom que você está buscando deixar seu código mais robusto e flexível! A ideia de passar o estudanteId pelos parâmetros da requisição realmente faz bastante sentido e ajuda a evitar inconsistências.

Parabéns pela solução criativa e continue se dedicando.

Bons estudos!