Skip to content

[REFACTOR] Juntar o método de gerar URL de documento que está duplicado #947

Description

@MouzinhoA

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:

  1. Mover o método para o serviço de documentos, recebendo por parâmetro o que muda entre as duas versões.
  2. Trocar as duas cópias por chamadas ao método novo.
  3. 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

  • grep -rn "Falha ao gerar URL para documento" apps/api/src/main retorna no máximo 1 ocorrência
  • generatePresignedUrl existe uma vez só no projeto
  • Nenhum dos dois controllers chama getPresignedDocumentUrl direto
  • Listar documentos de um paciente devolve as URLs como antes
  • Listar documentos de um profissional devolve as URLs como antes
  • mvn clean package passa, com PatientDocumentsControllerTest e HealthProfessionalControllerTest verdes

Artefatos

Nenhum.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

2Complexidade 2RefatoraçãoSquad de refatoraçãoTríadebackendLista de tarefas para backendchoreTarefas gerais que não se encaixam como um bug ou feature, como ajustes de infraestrutura, etc.

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions