Qual é o problema?
O método generatePresignedUrl está copiado em dois controllers, com o mesmo corpo e a mesma mensagem de erro, palavra por palavra:
controllers/patient/PatientDocumentsControllerImpl.java:132-150
controllers/professional/HealthProfessionalControllerImpl.java:114-141
Os dois pedem a URL ao serviço de documentos com validade de uma hora, montam o mesmo DocumentWithUrlResponseDTO e terminam assim:
} catch (Exception e) {
System.err.println("Falha ao gerar URL para documento: " + dto.name() + " - " + e.getMessage());
return null;
}
A única diferença entre as duas cópias está nos campos passados ao builder: a versão do paciente usa name e owner, a do profissional usa category, type, year e id.
Por que incomoda: esse return null faz o documento sumir da listagem quando a geração da URL falha, sem erro e sem aviso, porque logo depois vem um .filter(Objects::nonNull). Quem for arrumar esse comportamento precisa lembrar de mexer nos dois arquivos, e é fácil corrigir um e esquecer o outro.
Tarefas Relacionadas
- PR relacionado: nenhum
- Outras issues: nenhuma
Objetivo da Solução
Uma implementação só de geração de URL, na camada de documentos, usada pelos dois controllers.
O que fazer:
- Mover o método para o serviço de documentos, recebendo por parâmetro o que muda entre as duas versões.
- Trocar as duas cópias por chamadas ao método novo.
- Manter o
return null em caso de falha, agora num lugar só. Trocar o System.err.println por log.error("mensagem", e), com o logger declarado como campo da classe.
O contrato dos endpoints não muda. O DocumentWithUrlResponseDTO continua igual, e o .filter(Objects::nonNull) segue nos controllers. Mudar o comportamento de falha fica para outra issue.
Critérios de Aceite
Artefatos
Nenhum.
Qual é o problema?
O método
generatePresignedUrlestá copiado em dois controllers, com o mesmo corpo e a mesma mensagem de erro, palavra por palavra:controllers/patient/PatientDocumentsControllerImpl.java:132-150controllers/professional/HealthProfessionalControllerImpl.java:114-141Os dois pedem a URL ao serviço de documentos com validade de uma hora, montam o mesmo
DocumentWithUrlResponseDTOe terminam assim:A única diferença entre as duas cópias está nos campos passados ao builder: a versão do paciente usa
nameeowner, a do profissional usacategory,type,yeareid.Por que incomoda: esse
return nullfaz o documento sumir da listagem quando a geração da URL falha, sem erro e sem aviso, porque logo depois vem um.filter(Objects::nonNull). Quem for arrumar esse comportamento precisa lembrar de mexer nos dois arquivos, e é fácil corrigir um e esquecer o outro.Tarefas Relacionadas
Objetivo da Solução
Uma implementação só de geração de URL, na camada de documentos, usada pelos dois controllers.
O que fazer:
return nullem caso de falha, agora num lugar só. Trocar oSystem.err.printlnporlog.error("mensagem", e), com o logger declarado como campo da classe.O contrato dos endpoints não muda. O
DocumentWithUrlResponseDTOcontinua igual, e o.filter(Objects::nonNull)segue nos controllers. Mudar o comportamento de falha fica para outra issue.Critérios de Aceite
grep -rn "Falha ao gerar URL para documento" apps/api/src/mainretorna no máximo 1 ocorrênciageneratePresignedUrlexiste uma vez só no projetogetPresignedDocumentUrldiretomvn clean packagepassa, comPatientDocumentsControllerTesteHealthProfessionalControllerTestverdesArtefatos
Nenhum.