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()