V2#

Tema: Gestión de videojuegos y recomendaciones personalizadas

Introducción#

En este parcial, se desarrollará una aplicación que permita gestionar una base de datos local de videojuegos, consultar información adicional desde una API pública, y mostrar estos datos en una interfaz gráfica construida con JavaFX. El objetivo es evaluar las habilidades en programación con JavaFX, el manejo de bases de datos relacionales en MySQL, y la integración con APIs.

Instrucciones Generales#

  1. Este parcial es individual.

  2. Debes utilizar Java y Scene Builder para construir la interfaz gráfica.

  3. Usa MySQL para gestionar la base de datos local.

  4. Usa la API pública de RAWG para obtener información sobre videojuegos. Puedes utilizar la URL https://api.rawg.io/api/games?key=YOUR_API_KEY&search=NOMBRE reemplazando YOUR_API_KEY por 610cdabb5f9c4178b9f9539718c8f49d y NOMBER por el nombre del videojuego de interés.

  5. Integra todos los componentes en un proyecto funcional.

  6. Al finalizar, entrega el código fuente del proyecto junto con capturas de pantalla de la aplicación en funcionamiento.

Truco

Pueden usar las guías del curso, Programming II. Empiecen por crear el proyecto con todas las dependencias que se necesitan como se hizo en el taller de LoginApp.

Requerimientos del Proyecto#

Funcionalidades mínimas#

  1. Gestión de videojuegos (CRUD):

    • Los usuarios deben poder agregar videojuegos en la base de datos local.

    • Cada videojuego tendrá los siguientes campos:

      • Nombre - name: String

      • Fecha de lanzamiento - released: String

      • Género Principal - genres->0->name: String

      • Plataforma Principal - platform->0->platform->name: String

      • Calificación - rating: Double

      • Imagen - background_image: String

  2. Consulta de información desde la API:

    • Al agregar un videojuego, el usuario debe poder buscar información adicional por nombre desde la API.

    • Si encuentra datos relevantes, debe poder importarlos directamente a los campos correspondientes.

  3. Interfaz gráfica (JavaFX):

    • La aplicación debe tener una ventana principal con las siguientes secciones:

      • Formulario de videojuegos: Para imprimir videojuegos que se traen del API.

      • Botones de acción: Botón para realizar operaciones de ingresar elementos en la tabla creada, los que se obtienen después de realizar la consulta con el botón del API.

    • Un campo de búsqueda para consultar la API.

    • Utiliza Scene Builder para organizar los elementos visuales.

  4. Persistencia con MySQL:

    • Los datos de los videojuegos deben guardarse en una base de datos MySQL llamada videojuegos_db.

    • Debes implementar una tabla llamada videojuegos con los campos mencionados.

Estructura del Proyecto#

  1. Modelo (Data Layer):
    Define una clase Videojuego que represente los datos de un videojuego, debe contener todos los campos mencionados en la sección de las operaciones CRUD. El constructor de la clase debe solicitar los datos de la siguiente manera para que el código del API funcione correctamente: Videojuego(nombre, fecha_lanzamiento, genero_principal, plataforma_prindicpal, imagen, calificacion).

  2. Base de Datos:
    Configura la base de datos MySQL y crea la tabla videojuegos. Usa el siguiente código para la creación de la tabla:

    CREATE TABLE IF NOT EXISTS videojuegos (
        id INT AUTO_INCREMENT PRIMARY KEY,
        nombre VARCHAR(100) NOT NULL,
        fecha_lanzamiento DATE,
        genero_principal VARCHAR(100),
        plataforma_principal VARCHAR(10),
        calificacion DECIMAL(3, 2),
        imagen VARCHAR(200)
    );
    

    Recuerden que el único comando que debe ser ejecutado desde Workbrench (o la terminal) debe ser la creación de la base de datos CREATE DATABASE videojuegos_db;.

    Además. proporciona métodos en Java para insertar, actualizar, eliminar y consultar videojuegos. Puedes utilizar el código del taller de LoginAPP, sección Implementar el Modelo, o del taller de Operaciones CRUD, Operaciones CRUD para un Licorería.

  3. Integración con la API:
    Implementa una clase RawgApiClient con un método para buscar información de videojuegos:

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    public class RawgApiClient {
    
       private static final String API_KEY = "610cdabb5f9c4178b9f9539718c8f49d";
       private static final String BASE_URL = "https://api.rawg.io/api/games";
    
       public static Videojuego buscarVideojuegoPorNombre(String nombre) throws Exception {
          String apiUrl = BASE_URL + "?key=" + API_KEY + "&search=" + nombre.replace(" ", "%20");
          URL url = new URL(apiUrl);
          HttpURLConnection conn = (HttpURLConnection) url.openConnection();
          conn.setRequestMethod("GET");
    
          BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
          String inputLine;
          StringBuilder response = new StringBuilder();
    
          while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
          }
          in.close();
    
          JSONObject jsonResponse = new JSONObject(response.toString());
          JSONArray results = jsonResponse.getJSONArray("results");
          
          if (results.length() > 0) {
                JSONObject game = results.getJSONObject(0);
    
    
                Videojuego videojuego = new Videojuego(game.getString("name"),
                                                       game.getString("released"),
                                                       game.getJSONArray("genres").getJSONObject(0).getString("name"),
                                                       game.getJSONArray("platforms").getJSONObject(0).getJSONObject("platform").getString("name"),
                                                       game.getString("background_image"),
                                                       game.getDouble("rating")
                                                       );
    
                return videojuego;
          } else {
                throw new Exception("Videojuego no encontrado");
          }
       }
    }
    
  4. Controladores (Controller Layer):
    Implementa controladores que conecten la interfaz gráfica con la base de datos y la API.

  5. Interfaz gráfica (View Layer):
    Diseña la interfaz gráfica con Scene Builder. Debe incluir:

    • Formulario de videojuegos:

      • Campos de texto para nombre, fecha de lanzamiento, géneros, descripción y calificación.

      • Botón para buscar información en la API.

      • Imagen del videojuego.

    • Botón «Guardar» o «Insertar»: Para insertar o actualizar datos en la base de datos.

../../../images/SceneFinal.png

Figura 11 Ejemplo básico de posible interfaz. Cambien algunos colores y tamaños de letra, personalicen la interfaz.#

El funcionamiento es el siguiente:

  1. Antes de lanzar la aplicación, clase App, se debe crear la tabla.

  2. Se busca una película por título utilizando un botón, la información se muestra en las casillas tipo TextField usando el método id_elemento.setText(). Para cambiar la imagen desde el controlador al hacer click en el botón pueden usar:

    imagen_id.setImage(new Image(imagen_url_string));
    
  3. Ya visualizada la información, se pueden agregar los elementos dando click en otro botón y debe salir una alerta diciendo que fueron agregados correctamente: en la terminal con un print normal o una ventana de alerta, pueden usar el siguiente código dentro de la acción del botón para hacerla aparecer:

    Alert alert = new Alert(AlertType.INFORMATION);
    alert.setTitle("Título de la alerta");
    alert.setHeaderText(null);
    alert.setContentText("Algún mensaje de interés");
    
    alert.showAndWait();
    

Entregables#

  1. Código fuente completo en formato zip.

  2. Capturas de pantalla de la interfaz gráfica en funcionamiento. (opcional)

Criterios de Evaluación#

  1. Correcto uso de JavaFX para construir la interfaz.

  2. Funcionamiento de las operaciones CRUD con la base de datos MySQL.

  3. Integración correcta con la API de RAWG.

  4. Diseño limpio y funcional de la interfaz gráfica.

  5. Organización del código en capas (MVC).