Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Desafio resolvido

Nesse desafio, a implementação inicial já vinha pronta no curso, e a proposta era refatorar.

A versão original fazia a validação com um for e um contador, mas havia um problema: o contador era reiniciado dentro do loop, então nunca acumulava corretamente. Além disso, o uso de findAll() trazia todas as adoções para memória, o que não é performático.

 public void validar(SolicitacaoAdocaoDto dto) {
        List<Adocao> adocoes = adocaoRepository.findAll();
        Tutor tutor = tutorRepository.getReferenceById(dto.idTutor());
        for (Adocao a : adocoes) {
            int contador = 0;
            if (a.getTutor() == tutor && a.getStatus() == StatusAdocao.APROVADO) {
                contador = contador + 1;
            }
            if (contador == 5) {
                throw new ValidacaoExcpetion("Tutor chegou ao limite máximo de 5 adoções!");
            }
        }
    }

Na refatoração, optei por delegar a validação ao banco usando countByTutorIdAndStatus, deixando o código mais simples e eficiente:

package br.com.alura.adopet.api.validacoes;

import br.com.alura.adopet.api.dto.SolicitacaoAdocaoDto;
import br.com.alura.adopet.api.excpetion.ValidacaoExcpetion;
import br.com.alura.adopet.api.model.StatusAdocao;
import br.com.alura.adopet.api.repository.AdocaoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class ValidacaoTutorComLimiteDeAdocoes implements ValidacaoSolicitacaoAdocao {

    @Autowired
    private AdocaoRepository adocaoRepository;

    public void validar(SolicitacaoAdocaoDto dto) {
        int totalDeAdocoesTutor = adocaoRepository.countByTutorIdAndStatus(dto.idTutor(), StatusAdocao.APROVADO);
        if (totalDeAdocoesTutor == 5) {
            throw new ValidacaoExcpetion("Tutor chegou ao limite máximo de 5 adoções!");
        }
    }
}
2 respostas

Olá, Aldeny! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou a classe para implementar validações de adoção com Java, utilizou muito bem o repositório para consultar informações no banco de dados e ainda compreendeu a importância da exceção personalizada para tratar regras de negócio de forma clara.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Conteúdos relacionados

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
solução!

Olá Daniel,
Obrigado pela analise e feedback.