3
respostas

Onde consumir um serviço externo no padrão repositories

Bem, fui refatorar as funções do controller que não foram abordadas no curso e me veio uma dúvida:

No padrão repositories em qual camada se deve consumir os serviços externos? Controller, Model ou Repository? No meu exemplo eu consumi no controller, mas gostaria de saber se há uma convenção.

Meu controller:

  app.get('/atendimentos/:id', (req, res) => {
    const { id } = req.params;

    Appointment.getById(parseInt(id))
      .then(async (results) => {
        const appointment = results[0];
        const cpf = appointment.customer;

        const { data } = await axios.get(`http://localhost:8082/${cpf}`);
        appointment.customer = data;
        return appointment;
      })
      .then((appointment) => res.json(appointment))
      .catch((err) => res.status(400).json(err));
  });

Obrigado pela comunidade, At.te Matheus

3 respostas

Bom, eu não terminei ainda a refatoração, mas pelo que entendi o jeito que você fez tá seguindo sim a convenção que ela ensinou na aula, já que o seu controller está sendo responsável por responder o cliente. Como o serviço não inclui nenhuma regra de negócio, acho que não faz sentido usar ele. Mas enfim, mesmo assim eu vou continuar aqui os estudos, se descobrir alguma outra coisa te atualizo :)

Boa tarde Matheus, td bem? terminei aqui de refatorar e parece que sim, esse get é melhor fazer no controller mesmo, só não esquece daí de importar o axios que dá bom. Eu fiz o meu repo assim:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

e o meu model ficou quase igual ao da lista, só passando o id como parâmetro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

de resto, meu controller ficou igual ao seu :)

Obrigado pela resposta Thiago, que bom que acertei então, hehe.

Valeu!