Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] [DESAFIO] Parte 1

Olá!

Iniciei o desafio de conclusão do curso com algumas ideias diferentes do proposto. Inicialmente porque a aplicação que estou desenvolvendo busca os artistas da API do iTunes (Não precisa de api key, para quem quiser usar também).

A aplicação filtra os álbuns do artista pesquisado, assim como todas as músicas por álbum, essas informações serão salvas no banco de dados para fazermos as pesquisas.

Também alterei a pesquisa do Chat GPT pela pesquisa do Google Gemini, uma vez que o Chat GPT não disponibiliza mais os US$ 5 gratuitos para uso da API, porém o Gemini tem atendido bem e retornado as informações solicitadas.

Segue link do repositório para verem como está ficando: https://github.com/TheV1k/my-music

1 resposta

Olá, Victor. Como vai?

Parabéns pela iniciativa de personalizar o desafio! Essa é uma das melhores formas de fixar o conhecimento, pois ao sair do "escopo padrão", você acaba enfrentando problemas reais de integração e modelagem que enriquecem muito o aprendizado.

A escolha da iTunes API é excelente, especialmente por ser pública e não exigir autenticação complexa, o que facilita o foco no que realmente importa neste curso: a persistência com Spring Data JPA.

Aqui estão alguns pontos técnicos e sugestões para o seu projeto:

  • Modelagem de Relacionamentos: Como você está lidando com Artistas, Álbuns e Músicas, lembre-se de configurar corretamente as anotações @OneToMany e @ManyToOne. Uma boa prática é utilizar o carregamento do tipo FetchType.LAZY para as listas de músicas, evitando que o Hibernate traga dados desnecessários do banco de dados para a memória logo de cara.

  • Integração com Google Gemini: Essa troca é muito pertinente para o cenário atual. Para quem está seguindo seus passos, uma dica é utilizar o Spring AI, que facilita a integração com diferentes modelos de linguagem (LLMs) de forma padronizada. Caso esteja fazendo a requisição via RestTemplate ou WebClient, certifique-se de tratar bem os possíveis erros de cota ou timeout da API.

  • Consultas com Spring Data: Já que o objetivo é realizar pesquisas no banco, você pode explorar as Derived Queries. Por exemplo, para buscar músicas de um álbum específico, você pode criar métodos na interface Repository como:

List<Musica> findByAlbumTituloContainingIgnoreCase(String titulo);

Isso economiza a escrita de JPQL e torna o código muito mais legível.

  • Tratamento de Dados Externos: Como os dados vêm de uma API externa, uma boa prática é criar classes DTO (Data Transfer Objects) para receber o JSON do iTunes e apenas depois converter esses dados para as suas Entities (JPA). Isso mantém seu modelo de banco de dados protegido de mudanças repentinas na estrutura da API externa.

Seu repositório parece estar seguindo um caminho muito sólido. Continue explorando as buscas customizadas com @Query se precisar de filtros mais complexos que envolvam múltiplos joins entre artista e música.

Espero que possa ter lhe ajudado!