Skip to content

[REFACTOR] Usar os validadores de arquivo que existem no projeto #948

Description

@MouzinhoA

Qual é o problema?

O projeto tem três anotações prontas para validar arquivo enviado, em documents/interfaces/validations/: NotEmptyFiles, ValidFileFormat e ValidFileSize. Só a primeira é usada. As outras duas nunca foram aplicadas em lugar nenhum.

Enquanto isso, o upload de foto do profissional refaz as mesmas verificações na mão, em HealthProfessionalApplicationServiceImpl.java:212-233:

if (file.isEmpty()) {
    throw new RuntimeException("Arquivo vazio");
}
// ... lista de tipos permitidos
long maxSize = 5 * 1024 * 1024;
if (file.getSize() > maxSize) {
    throw new RuntimeException("Arquivo excede 5MB");
}

O problema é que essa cópia manual usa regras diferentes das anotações:

Anotações do projeto Upload de foto
Tamanho máximo 10MB 5MB
Tipos aceitos pdf, jpeg, jpg, png, docx png, jpeg, jpg, webp

Na prática:

  • O tamanho máximo tem três valores no projeto. O application.yaml:38 aceita 10MB, a anotação assume 10MB, e o upload de foto recusa acima de 5MB. Quem enviar uma foto de 7MB toma erro sem entender o porquê.
  • webp funciona na foto do profissional e falha no documento do paciente.
  • Como a validação está no meio do serviço, o erro sai como 500 em vez de 400.

Tarefas Relacionadas

  • PR relacionado: nenhum
  • Outras issues: nenhuma

Objetivo da Solução

Ter uma regra só de "arquivo válido" no projeto, aplicada por anotação no DTO, com o mesmo limite de tamanho em todo lugar.

O que fazer:

  1. Adotar 10MB como limite único, que é o valor do application.yaml:38 e o padrão de ValidFileSize.java:30. Nada muda nesses dois, só o upload de foto passa a seguir o mesmo número.
  2. Acrescentar webp à lista de ValidFileFormat.java:30-35, para não quebrar quem envia foto de perfil nesse formato hoje.
  3. Fazer as anotações aceitarem um MultipartFile sozinho, e não só uma lista. É isso que hoje impede usá-las no upload de foto.
  4. Anotar o parâmetro do upload de foto e apagar o bloco manual das linhas 212 a 233.

Se a equipe preferir outro limite ou não quiser webp na lista comum, os passos 1 e 2 mudam de valor, mas o resto continua igual.

Critérios de Aceite

  • @ValidFileFormat e @ValidFileSize aparecem em uso no código, fora da pasta onde foram definidas
  • HealthProfessionalApplicationServiceImpl não tem mais verificação de isEmpty, getContentType nem getSize
  • O limite de tamanho aparece uma vez só no código Java, e bate com o do application.yaml
  • Enviar arquivo grande demais no upload de foto retorna 400, e não 500
  • Enviar arquivo de tipo não permitido no upload de foto retorna 400
  • Enviar uma imagem válida no upload de foto continua funcionando
  • mvn clean package passa

Artefatos

Nenhum.

Activity

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

Metadata

Metadata

Labels

3Complexidade 3Refatoraçã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.profissionaisRefatorar e evoluir o módulo de profissionais para garantir maior aderência às necessidades da APAE.

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions