rmanguinho / clean-ts-api

API em NodeJs usando Typescript, TDD, Clean Architecture, Design Patterns e SOLID principles
https://rmanguinho.github.io/
GNU General Public License v3.0
1.86k stars 498 forks source link

Dúvida com exceptions #29

Closed davidsylvestre closed 3 years ago

davidsylvestre commented 3 years ago

Estou em dúvida de como tratar corretamente as exceptions que existem nos use-case. Por exemplo, eu tenho o use-case emprestar-livro

Nele eu tenho os seguintes passos: Verificar se livro está disponível -> gera um exception de negócio Verificar se Leitor possui pendencias -> gera um exception de negocio Inserir empréstimo -> pode ocorrer um exception, mas é erro interno

Os exceptions gerados nas duas verificações, são pertinentes ao usuário e seria legal souber da existência deles. Minha dúvida fica em relação ao controller, pois se eu gerar algo no formato abaixo, eu não consigo capturar o erro.

try {
   await emprestar-livro(...params)
   return noContent()
} catch(err) {
   return serverError(error)
}

Qual seria a abordagem mais correta para essa situação?

rmanguinho commented 3 years ago

Acho que nesse caso o que faria mais sentido seria você alterar o tipo de retorno do seu usecase pra ele poder retornar um Model (sucesso) ou um objeto de Error (nem precisa ser uma exception mesmo). No TS você pode fazer isso com o operador pipe |. No seu controller você precisaria checar o tipo de retorno e tomar uma decisão.

Em ter., 27 de out. de 2020 às 09:50, David Sylvestre < notifications@github.com> escreveu:

Estou em dúvida de como tratar corretamente as exceptions que existem nos use-case. Por exemplo, eu tenho o use-case emprestar-livro

Nele eu tenho os seguintes passos: Verificar se livro está disponível -> gera um exception de negócio Verificar se Leitor possui pendencias -> gera um exception de negocio Inserir empréstimo -> pode ocorrer um exception, mas é erro interno

Os exceptions gerados nas duas verificações, são pertinentes ao usuário e seria legal souber da existência deles. Minha dúvida fica em relação ao controller, pois se eu gerar algo no formato abaixo, eu não consigo capturar o erro.

try {

await emprestar-livro(...params)

return noContent() } catch(err) {

return serverError(error) }

Qual seria a abordagem mais correta para essa situação?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/rmanguinho/clean-ts-api/issues/29, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABDASG4OBKJLLVUYPGUKWVDSM263DANCNFSM4TAY52GQ .

-- Rodrigo Manguinho

davidsylvestre commented 3 years ago

Massa, farei algo nesse sentido. Eu estava quase tratando os tipos de erro com um switch case, mas achei que não ficaria legal. Muito obrigado (=