Skip to content

Conversation

@MateusVinicio
Copy link

No description provided.

@MateusVinicio MateusVinicio self-assigned this Jun 7, 2022
Copy link
Contributor

@ronifabio ronifabio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Só está aparecendo os thumbnail da última ou últimas imagens enviadas pelo pressionamento do Adicionar.
  • Saiba que o usuário pode querer adicionar uma imagem por vez pelo formulário. Então, se ele vai adicionar 3 imagens, ele abrirá a janela de upload 3 vezes. Por isso, é preciso guardar as URLs destas imagens, que já foram persistidas no Cloudinary, na sessão. Assim, o JSP vai ler estas URLs para apresentar corretamente os thumbnails.
  • Verifique se os limites de tamanho de imagem definidos no application.properties estão sendo respeitados.
  • spring.servlet.multipart.max-file-size=51000KB
  • spring.servlet.multipart.max-request-size=51000KB
  • Na verdade, estes valores estão muito altos, reduzir para 2000KB
  • Apresentar mensagem de erro quando exceder este tamanho.
  • O exception gerado é MaxUploadSizeExceededException
  • Mesmo assim, usar a API de transformação de imagens do Cloudinary e ainda reduzir mais o tamanho para não ocupar tanto espaço de armazenamento.

if (isValidateImage(image)) {
File jobImage = Files.createTempFile("temp", image.getOriginalFilename()).toFile();
image.transferTo(jobImage);
Map data = cloudinary.uploader().upload(jobImage, ObjectUtils.asMap("folder", "jobs"));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Só para contextualização. Não tem problema de salvar no Cloudinary mesmo que o usuário desista do cadastro. Mesmo se o usuário desistir do cadastro, haverá outra história que removerá imagens antigas do Cloudinary. A API permite buscar as fotos por data.

}

if (!successImages.isEmpty())
sessionDTO.setImagesSession(successImages);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Como este POST está recebendo apenas uma ou mais imagem enviadas pelo botão adicionar, então este vetor successImage só vai ter estas imagens.
  • Assim, se no POST anterior, a sessão já tinha uma imagem armazenada, a linha a seguir está substituindo o vetor anterior pelo atual, ou seja, com as imagens do POST corrente.
  • Por isso, o JSP está apresentado sempre as imagens enviadas no Adicionar corrente.
  • Lembre, o usuário pode usar esta página escolhendo uma imagem por vez, também. Para cada imagem, ele clica em adicionar. Então, estas imagens precisam ser acumuladas na sessão e apresentadas como thumbnails.

sessionDTO.setImageSession((String)data.get("url"));
log.debug("Passo 5 {}", sessionDTO);
if (!invalidImages.isEmpty())
redirectAttributes.addFlashAttribute("errors", invalidImages);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Inclua o vetor de imagens que já estão na sessão também no escopo de flash. Assim, o código fica mais legível e o JSP vai apresentar os thumbnails de acordo com a lista de URLs que estão neste atributo no escopo de flash.
  • Lembre que o escopo de flash guarda temporariamente na sessão, usado em redirecionamentos, quando uma nova requisição é criada no redirect.

public String saveFormImagePath(HttpSession httpSession, RedirectAttributes redirectAttributes, JobRequestDTO dto, Model model) throws IOException {
try {
if (dto.images.get(0).getOriginalFilename().equals("")) {
redirectAttributes.addFlashAttribute("errors", "Nenhuma imagem enviada.");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Quando é erro, faça um encaminhamento.
  • Assim, o formulário continua preenchido e mesmo que ele dê F5, cairá no mesmo erro.
  • Só quando o POST é sucesso é que se faz redirecionamento.


sessionDTO.setImageSession((String)data.get("url"));
log.debug("Passo 5 {}", sessionDTO);
if (!invalidImages.isEmpty())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Como boa prática, trate os erros no início do método.
  • Geralmente, não usamos else, apenas if
  • Então, se houver um erro, isto é verificado no if e se entrar nele, faz o encaminhamento para a página que vai mostrar o erro.
  • Isso evita o uso do else, deixa o código mais difícil de ler.
  • Com os tratamentos de erro no início com o uso do encaminhamento, todo o código que estiver abaixo destes ifs de validação, poderão executar com segurança, ou seja, os dados já foram validados.

sessionDTO.setClientConfirmation(true);
sessionDTO.setDateCreated(DateUtil.getToday());
sessionDTO.setStatus("Requerido");
sessionDTO.setStatus("AVAILABLE");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Usar o enum AVAILABLE
  • public class JobRequest {
    /**
    • AVAILABLE: disponível para candidaturas e permanece neste estado também durante o recebimento de candidaturas
    • BUDGET: passa para este estado quando alcançado o total de candidaturas esperado ou quando o cliente encerra o recebimento de candidaturas
    • TO_DO: o profissional foi escolhido para fazer o serviço e o serviço ainda não foi realizado
    • CLOSED: o serviço foi realizado
      */
      public enum Status {
      AVAILABLE, BUDGET, TO_DO, CLOSED
      };

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants