Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Outra forma de resolver o problema de dependencia cilcica

Ola , fiz de outra forma, eu criei um construtor no SeriesDTO passando a entidade Series :

public record SeriesDTO(
        Long id,
        String title,
        String yearsDuration,
        String durationInMinutes,
        Integer totalSeasons,
        Double rating,
        Integer totalVotes,
        CategoryGenre genreSeries,
        String actors,
        String synopsis,
        URL poster
) {
**    public SeriesDTO(Series series) {
        this(series.getId(), series.getTitle(), series.getYearsDuration(), series.getDurationInMinutes(),
                series.getTotalSeasons(), series.getRating(), series.getTotalVotes(), series.getGenreSeries(),
                series.getActors(), series.getSynopsis(), series.getPoster());
    }**
}

Aterei a propriedade da anotacao @OneToMany para *LAZY* na classe Series :

@OneToMany(mappedBy = "series", cascade = CascadeType.ALL, fetch = FetchType.**LAZY**)
   private List<Episode> episodes = new ArrayList<>();

E chamei o stream , ja instanciando a classe SeriesDTO direto no map na classe SeriesController :

@RestController
public class SeriesController {
    @Autowired
    SerieRepository serieRepository;

    @GetMapping("/series")
    public List<SeriesDTO> showSeries() {
        List<Series> series = serieRepository.findAll();
        List<SeriesDTO> seriesDTOS = series.stream().map(**SeriesDTO::new**).collect(Collectors.toList());
        return seriesDTOS;
    }
}

Essa abordagem tambem seria valida?

1 resposta
solução!

Oi, Rodrigo! Tudo bem?

Sua abordagem é bastante válida e segue boas práticas de desenvolvimento ao utilizar um construtor no SeriesDTO para converter diretamente a entidade Series, o que torna o código mais limpo e fácil de manter. Podemos destacar alguns pontos positivos da sua solução:

  1. Uso do Construtor no DTO: Criar um construtor no SeriesDTO que aceita uma entidade Series simplifica a conversão e centraliza a lógica de mapeamento em um único lugar. Isso é útil para evitar repetição de código.

  2. FetchType.LAZY: Alterar a propriedade fetch para LAZY na anotação @OneToMany é uma boa prática para evitar carregar dados desnecessários do banco de dados, o que pode melhorar a performance.

  3. Uso de Streams no Controller: Utilizar streams para mapear a lista de entidades Series para SeriesDTO é uma abordagem moderna e eficiente.

Logo, essa abordagem não só é válida como também é bastante elegante. Ela melhora a legibilidade e a manutenção do código.

Um forte abraço e bons estudos!