Crudzaso requiere el desarrollo de CodeWordle, una aplicación educativa inspirada en el clásico juego Wordle, enfocada en el aprendizaje de términos relacionados con programación y tecnología. El propósito de la aplicación es permitir que un usuario interactúe con una interfaz visual desde la cual pueda iniciar partidas, ingresar intentos y obtener retroalimentación visual sobre la exactitud de las palabras ingresadas, según el tema seleccionado.
El objetivo de esta actividad es evaluar la capacidad para construir una aplicación funcional y organizada por capas, implementando controladores mixtos (para vistas y API REST), manejo de datos en una base H2 utilizando Spring JDBC, uso de vistas JSP con Jakarta Tag Library, y una interfaz diseñada con Bootstrap 5 o Tailwind CSS.
El proyecto deberá cumplir con los siguientes aspectos técnicos:
- Lenguaje: Java 21.
- Framework principal: Spring Boot con dependencias para Web, Validation y JDBC.
- Base de datos: H2 (en memoria o archivo local).
- Persistencia: implementada mediante Spring JDBC utilizando
JdbcTemplate. - Vistas: desarrolladas con JSP y Jakarta Tag Library (JSTL).
- Diseño visual: desarrollado con Bootstrap 5 o Tailwind CSS, aplicando principios de interfaz simple, legible y funcional.
- Anotaciones de Lombok: para simplificar la escritura de modelos y servicios (constructores, getters/setters).
- Controladores: deben incluir métodos que retornen vistas (controladores MVC) y métodos RESTful que retornen información estructurada en formato JSON.
- Respuestas REST: gestionadas mediante el uso de
ResponseEntity, devolviendo códigos de estado HTTP coherentes y mensajes claros. - Swagger (opcional): se puede incluir para documentar los endpoints REST.
- Commits: deben seguir la convención Conventional Commits, utilizando prefijos descriptivos (
feat,fix,test,docs, etc.). - Trazabilidad: se recomienda registrar los avances del desarrollo en Azure Boards y dejar commits en comentarios.
La aplicación debe cumplir con los siguientes comportamientos:
- Gestión de partida: el usuario debe poder iniciar una nueva partida seleccionando un tema disponible (por ejemplo, Java, Spring, DevOps, etc.).
- Selección de palabra objetivo: el sistema debe seleccionar de forma aleatoria una palabra asociada al tema y establecerla como la palabra que debe ser adivinada.
- Interacción del usuario: el jugador debe ingresar intentos desde la interfaz. Cada intento debe ser validado según las reglas del juego (longitud, validez y comparación con la palabra objetivo).
- Evaluación de resultados: el sistema debe analizar cada intento y determinar si el usuario acertó la palabra o si continúa la partida.
- Límites de intentos: la partida debe tener un número máximo de intentos definido (por ejemplo, seis). Una vez alcanzado el límite, debe establecerse un estado final (ganado o perdido).
- Persistencia de datos: las palabras disponibles, los intentos realizados y las partidas deben almacenarse en la base de datos H2 mediante consultas con Spring JDBC.
- Vista principal: debe existir una única vista accesible desde la raíz del proyecto que muestre el tablero del juego, el campo de ingreso de palabras y la retroalimentación visual.
- Comunicación entre vista y backend: la vista JSP debe comunicarse con los controladores REST mediante solicitudes asíncronas (AJAX o
fetch) para la validación de intentos y el control del estado del juego. - Visualización de resultados: la vista debe actualizar el estado del tablero según los aciertos o errores del usuario, utilizando estilos CSS para indicar coincidencias, letras incorrectas o posiciones erradas.
- Finalización de la partida: al concluir una partida, el sistema debe mostrar un mensaje de resultado y permitir iniciar una nueva.
El proyecto debe incluir:
- Un controlador MVC que gestione las solicitudes que renderizan vistas, inicialice los datos necesarios y devuelva la interfaz principal.
- Uno o varios controladores REST que gestionen la lógica del juego, la creación de partidas, el procesamiento de intentos, la verificación del estado del juego y la obtención de información complementaria (como temas disponibles o resultados de partidas).
- Los controladores REST deben utilizar
ResponseEntityy retornar respuestas con los códigos HTTP adecuados según el resultado de cada operación.
-
Las vistas deben implementarse con JSP y estar ubicadas bajo la ruta:
src/main/webapp/WEB-INF/game/ -
La vista principal debe:
- Permitir al usuario iniciar una nueva partida.
- Mostrar los intentos realizados y el resultado de cada uno.
- Presentar el estado del juego (en curso, ganado, perdido).
- Integrar estilos mediante Bootstrap 5 o Tailwind CSS para lograr un diseño atractivo y funcional.
- Usar JSTL para renderizar datos dinámicos o mensajes de estado.
- La conexión a la base de datos H2 debe estar configurada correctamente en el archivo
application.properties. - El esquema y los datos iniciales deben definirse en archivos
schema.sqlydata.sqldentro del directorioresources. - El acceso a los datos debe implementarse mediante Spring JDBC, utilizando
JdbcTemplatepara las operaciones de lectura, inserción y actualización. - La información de palabras, partidas e intentos debe mantenerse en la base de datos durante la ejecución del programa.
- Se deben incluir pruebas unitarias para los componentes principales de la aplicación.
- Deben verificarse las reglas de negocio relacionadas con la validación de intentos, la comparación de palabras y la actualización del estado de la partida.
- Se deben incluir pruebas de acceso a datos que confirmen el funcionamiento del repositorio y la conexión a la base de datos H2.
- Las pruebas deben estar implementadas con JUnit 5 y ejecutarse correctamente desde el entorno de desarrollo.
-
El proyecto debe incluir un archivo README con:
- Instrucciones de ejecución.
- Dependencias y versiones utilizadas.
- Descripción funcional general del sistema.
- Información sobre los endpoints y rutas principales.
- Breve guía de uso de la interfaz.
-
Si se implementa Swagger, debe especificarse la URL de acceso en el README.
-
Si se emplea trazabilidad con Azure Boards, debe documentarse la relación entre tareas, commits y funcionalidades desarrolladas.
src/main/java/com/crudzaso/codewordle/
├─ config/
├─ controller/
├─ service/
├─ repository/
├─ model/
src/main/resources/
├─ application.properties
├─ schema.sql
├─ data.sql
src/main/webapp/WEB-INF/game/
└─ game.jsp