Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Desafio

Nombre sugerido: MusicApp

Funcionalidades del menú

Registrar cantante

Registrar canción

Buscar canciones por cantante

Listar cantantes

Listar canciones

Buscar información de un cantante con ChatGPT (opcional)

Salir

musicapp
┣ src/main/java/com/tuempresa/musicapp
┃ ┣ model
┃ ┃ ┣ Cantante.java
┃ ┃ ┗ Cancion.java
┃ ┣ repository
┃ ┃ ┣ CantanteRepository.java
┃ ┃ ┗ CancionRepository.java
┃ ┣ service
┃ ┃ ┣ ConsolaService.java
┃ ┃ ┗ InfoCantanteService.java (opcional)
┃ ┗ MusicappApplication.java
┗ src/main/resources
┗ application.properties

<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.5.11</version>
    <relativePath/>
</parent>

<groupId>com.tuempresa</groupId>
<artifactId>musicapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>musicapp</name>
<description>Aplicación de música con consola y PostgreSQL</description>

<properties>
    <java.version>17</java.version>
</properties>

<dependencies>
    <!-- Consola + Spring -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- PostgreSQL -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Opcional: integración con ChatGPT mediante Spring AI -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-model-openai-sdk</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- Utilidades -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Spring AI documenta la propiedad spring.ai.openai.api-key para configurar la clave de OpenAI.

spring.application.name=musicapp

conexión a PostgreSQL

spring.datasource.url=jdbc:postgresql://localhost:5432/musicdb
spring.datasource.username=postgres
spring.datasource.password=123456
spring.datasource.driver-class-name=org.postgresql.Driver

import jakarta.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "cantantes")
public class Cantante {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String nombre;
private String pais;
private String generoMusical;

@OneToMany(mappedBy = "cantante", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Cancion> canciones = new ArrayList<>();

public Cantante() {}

public Cantante(String nombre, String pais, String generoMusical) {
    this.nombre = nombre;
    this.pais = pais;
    this.generoMusical = generoMusical;
}

public void agregarCancion(Cancion cancion) {
    cancion.setCantante(this);
    this.canciones.add(cancion);
}

public Long getId() { return id; }
public String getNombre() { return nombre; }
public String getPais() { return pais; }
public String getGeneroMusical() { return generoMusical; }
public List<Cancion> getCanciones() { return canciones; }

public void setId(Long id) { this.id = id; }
public void setNombre(String nombre) { this.nombre = nombre; }
public void setPais(String pais) { this.pais = pais; }
public void setGeneroMusical(String generoMusical) { this.generoMusical = generoMusical; }
public void setCanciones(List<Cancion> canciones) { this.canciones = canciones; }

@Override
public String toString() {
    return "Cantante{" +
            "id=" + id +
            ", nombre='" + nombre + '\'' +
            ", pais='" + pais + '\'' +
            ", generoMusical='" + generoMusical + '\'' +
            '}';
}

}

1 respuesta

Hola David,

Gracias por compartir tu código con nosotros. Es muy bueno ver cómo vas poniendo en práctica lo que aprendes.

Te recomiendo que puedas interactuar con el resto de nuestros compañeros por nuestro Discord.

En virtud de que en Discord el alcance es mayor, la interacción es inmediata y llega a más compañeros, y el foro solo quedaría para esclarecer cualquier duda que puedas tener sobre el contenido de los cursos.

De esa manera, si quieres seguir compartiendo tus soluciones y proyectos, sea por el Discord — con certeza por ahí llegará a más personas.

¡Gracias nuevamente!

Saludos,

Si este post te ayudó, por favor, marca como solucionado ✓. ¡Continúa con tus estudios!