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

[Projeto] minha solução desafio final JPA Irei dividir em varias partes por nao tem espaço suficiente

package Desafio_MusicaJPA.Alura;

import Desafio_MusicaJPA.Alura.Principal.Main;
import Desafio_MusicaJPA.Alura.Service.Repositorio;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AluraApplication implements CommandLineRunner {
    @Autowired(required = true)
private Repositorio repositorio;

    public static void main(String[] args) {
        SpringApplication.run(AluraApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        Main main = new Main(repositorio);
        main.exibeMenu();
    }
}
package Desafio_MusicaJPA.Alura.Service;

import Desafio_MusicaJPA.Alura.Model.Artista;
import Desafio_MusicaJPA.Alura.Model.Genero;
import Desafio_MusicaJPA.Alura.Model.Musica;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface Repositorio extends JpaRepository<Artista,Long> {

    List<Artista> findByNomeContainingIgnoreCase(String trechonome);

    @Query("select m from Musica m WHERE m.genero = :genero  ")
    List<Musica> buscaporgenero(Genero genero);
}
package Desafio_MusicaJPA.Alura.Service;

import com.theokanning.openai.completion.CompletionRequest;
import com.theokanning.openai.service.OpenAiService;

public class ConsultaChatGpt {
    public static String buscadorDeInformações(String texto) {
        OpenAiService service = new OpenAiService(System.getenv("OPENAI_APIKEY"));

        CompletionRequest requisicao = CompletionRequest.builder()
                .model("gpt-3.5-turbo-instruct")
                .prompt("me traga informações do artista: " + texto)
                .maxTokens(1000)
                .temperature(0.7)
                .build();

        var resposta = service.createCompletion(requisicao);
        return resposta.getChoices().get(0).getText();
    }
}

4 respostas

Scanner sc = new Scanner(System.in); Repositorio repositorio; List artistaList = new ArrayList<>();

public Main(Repositorio repositorio) {
    this.repositorio = repositorio;
}
public void exibeMenu() {
    var opcao = -1;
    while (opcao != 0) {
        var menu = """
                1 - Cadastrar Artista
                2 - Listar Artistas cadastrados
                3 - Cadastrar musicas
                4 - Listar musicas
                5 - buscar musicas por artista
                6 - Pesquisar dados sobre um artista
                7 - Buscar Musica por genero
                0 - Sair......
                                
                 """;
        System.out.println(menu);
        opcao = sc.nextInt();
        sc.nextLine();
            switch (opcao) {
                case 1:
                    cadastrarArtista();
                    break;
                case 2:
                   listarArtistasCadastrados();
                   break;
               case 3:
                  cadastrarMusicas();
                   break;
                case 4:
                    listarMusicas();
                    break;
                case 5:
                    buscarMusicaPorArtista();
                    break;
                    case 6:
                        buscarInformaçõesDoArtista();
                        break;
                case 7:
                    buscarMusicaPorGenero();
                    break;
                case 0:
                    System.out.println("Saindo......");
                    break;
            }
        }
}
private void cadastrarArtista() {
    var opcao = "s";
    while (opcao.equalsIgnoreCase("s")) {
        System.out.println("Digite o nome do artista que Deseja cadastar: ");
        var nome = sc.nextLine();
        System.out.println("Digite a Nacionalidade");
        var nacionalidade = sc.nextLine();
        Artista artista = new Artista(nome, nacionalidade);
        artistaList.add(artista);
        repositorio.save(artista);
        System.out.println("deseja continuar cadastrando? S/N");
        opcao = sc.nextLine();
    }
}
private void listarArtistasCadastrados() {
    artistaList = repositorio.findAll();
    artistaList.stream()
            .sorted(Comparator.comparing(Artista::getNome))
            .forEach(System.out::println);
}
private void cadastrarMusicas() {
    System.out.println("digite o nome do cantor que deseja cadastrar a musica");
    var nome = sc.nextLine();
    Optional<Artista> artistas = artistaList.stream()
            .filter(s -> s.getNome().toLowerCase().contains(nome.toLowerCase()))
            .findFirst();
    if (artistas.isPresent()){
        Artista artistaEncontrado = artistas.get();
        System.out.println("Digite o nome da musica");
        var nomeMusica = sc.nextLine();
        System.out.println("digite o nome do album");
        var album = sc.nextLine();
        System.out.println("digite o ano de lançamento");
        var datadlancamento = sc.nextInt();
        sc.nextLine();
        System.out.println("digite o genero musical");
        Genero genero = Genero.fromString(sc.nextLine());
        Musica musica = new Musica(nomeMusica,album,datadlancamento,genero,artistaEncontrado);
        artistaEncontrado.getMusicas().add(musica);
        repositorio.save(artistaEncontrado);
        System.out.println("Musica casdastrada com sucesso!!!");
    }
    else {
        System.out.println("artista não encontrado");
    }
}
private void listarMusicas() {
    System.out.println("musicas cadastradas em nosso banco!!!");
    for (int i = 0 ; i < artistaList.size(); i++){
        artistaList.get(i).getMusicas();
       System.out.println(artistaList.get(i).getMusicas());
   }
}
private void buscarMusicaPorArtista() {
    repositorio.findAll();
    System.out.println("digite o nome do artista que deseja procurar que deseja procurar");
    var trechonome = sc.nextLine();
    List<Artista> buscaArtista = repositorio.findByNomeContainingIgnoreCase(trechonome);
    System.out.println("------------ musicas do artista cadastradas no sistema ------------");
    buscaArtista.stream().forEach(s -> System.out.println( s.getMusicas()));
}
    private void buscarInformaçõesDoArtista() {
        System.out.println("digite o nome do artista que deseja pesquisar");
        var artista = sc.nextLine();
        var buscador = ConsultaChatGpt.buscadorDeInformações(artista);
        System.out.println(buscador);
    }
    private void buscarMusicaPorGenero() {
        System.out.println("Digite o genero musical que deseja buscar:");
        Genero genero = Genero.fromString(sc.nextLine());
        List<Musica> buscagenero = repositorio.buscaporgenero(genero);
        buscagenero.stream().forEach(System.out::println);
    }
    package Desafio_MusicaJPA.Alura.Model;

import jakarta.persistence.*;

import java.time.LocalDate;

@Entity
@Table(name = "musicas")
public class Musica {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private  Long id;
    private String nomeMusica;
    private String album;
    private int anodeLancamento;
    @Enumerated(EnumType.STRING)
    private Genero genero;
    @ManyToOne()
    private Artista artista;

    public Musica() {
    }

    public Musica(String nomeMusica, String album, int anodeLancamento, Genero genero, Artista artista) {
        this.nomeMusica = nomeMusica;
        this.album = album;
        this.anodeLancamento = anodeLancamento;
        this.genero = genero;
        this.artista = artista;
    }

    public String getNomeMusica() {
        return nomeMusica;
    }

    public void setNomeMusica(String nomeMusica) {
        this.nomeMusica = nomeMusica;
    }

    public String getAlbum() {
        return album;
    }

    public void setAlbum(String album) {
        this.album = album;
    }

    public int getAnodeLancamento() {
        return anodeLancamento;
    }

    public void setAnodeLancamento(int anodeLancamento) {
        this.anodeLancamento = anodeLancamento;
    }

    public Genero getGenero() {
        return genero;
    }

    public void setGenero(Genero genero) {
        this.genero = genero;
    }

    public Artista getArtista() {
        return artista;
    }

    public void setArtista(Artista artista) {
        this.artista = artista;
    }

    @Override
    public String toString() {
        return "Musica(" +
                  this.nomeMusica + '\'' +
                ", album='" + this.album + '\'' +
                ", artista=" + this.artista.getNome() +
                ')';
    }
}
package Desafio_MusicaJPA.Alura.Model;

import jakarta.persistence.*;
import org.antlr.v4.runtime.misc.NotNull;

import java.util.List;
@Entity
@Table(name = "artistas")
public class Artista {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String nacionalidade;
    @OneToMany(mappedBy = "artista", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Musica> musicas;

    public Artista() {
    }

    public Artista(String nome, String nacionalidade) {
        this.nome = nome;
        this.nacionalidade = nacionalidade;
    }

    public Artista(String nome, String nacionalidade, List<Musica> musicas) {
        this.nome = nome;
        this.nacionalidade = nacionalidade;
        this.musicas = musicas;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setNacionalidade(String nacionalidade) {
        this.nacionalidade = nacionalidade;
    }

    public void setMusicas(List<Musica> musicas) {
        musicas.forEach(e -> e.setArtista(this));
        this.musicas = musicas;
    }

    public String getNome() {
        return nome;
    }

    public String getNacionalidade() {
        return nacionalidade;
    }

    public List<Musica> getMusicas() {
        return musicas;
    }

    @Override
    public String toString() {
        return "Artista{" +
                "nome='" + nome + '\'' +
                ", nacionalidade='" + nacionalidade + '\'' +
                '}';
    }
}
    

package Desafio_MusicaJPA.Alura.Model;

public enum Genero { ROCK("rock"), POP("pop"), SAMBA("samba"), PAGODE("pagode"), ELETRONICA("eletronica"), SERTANEJO("sertanejo"), FORRO("forro"), FUNK("funk"); private String genero;

Genero(String genero) {
    this.genero = genero;
}
public static Genero fromString(String text) {
    for (Genero genero1 : Genero.values()) {
        if (genero1.genero.equalsIgnoreCase(text)) {
            return genero1;
        }
    }
    throw new IllegalArgumentException("Nenhuma categoria encontrada para a string fornecida: " + text);
}

}

solução!

Oi, Wesley! Como vai?

Parabéns pelo resultado na resolução do projeto, ficou ótimo!

Também agradeço por compartilhar seu código com os demais estudantes, com certeza vai ajudar nos estudos de todas as pessoas que estão aprendendo este mesmo assunto.

Continue mergulhando em tecnologia e se tiver dúvidas, conte com o fórum.

Abraços e bons estudos!