Skip to content

Instantly share code, notes, and snippets.

@AntonyMRuiz
Created October 30, 2025 04:37
Show Gist options
  • Save AntonyMRuiz/fb4157dda80c6aa685f00bc2096b630b to your computer and use it in GitHub Desktop.
Save AntonyMRuiz/fb4157dda80c6aa685f00bc2096b630b to your computer and use it in GitHub Desktop.

CRUDACTIVITY — CodeWordle


Contexto

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.


Requerimientos técnicos

El proyecto deberá cumplir con los siguientes aspectos técnicos:

  1. Lenguaje: Java 21.
  2. Framework principal: Spring Boot con dependencias para Web, Validation y JDBC.
  3. Base de datos: H2 (en memoria o archivo local).
  4. Persistencia: implementada mediante Spring JDBC utilizando JdbcTemplate.
  5. Vistas: desarrolladas con JSP y Jakarta Tag Library (JSTL).
  6. Diseño visual: desarrollado con Bootstrap 5 o Tailwind CSS, aplicando principios de interfaz simple, legible y funcional.
  7. Anotaciones de Lombok: para simplificar la escritura de modelos y servicios (constructores, getters/setters).
  8. Controladores: deben incluir métodos que retornen vistas (controladores MVC) y métodos RESTful que retornen información estructurada en formato JSON.
  9. Respuestas REST: gestionadas mediante el uso de ResponseEntity, devolviendo códigos de estado HTTP coherentes y mensajes claros.
  10. Swagger (opcional): se puede incluir para documentar los endpoints REST.
  11. Commits: deben seguir la convención Conventional Commits, utilizando prefijos descriptivos (feat, fix, test, docs, etc.).
  12. Trazabilidad: se recomienda registrar los avances del desarrollo en Azure Boards y dejar commits en comentarios.

Requerimientos funcionales

La aplicación debe cumplir con los siguientes comportamientos:

  1. Gestión de partida: el usuario debe poder iniciar una nueva partida seleccionando un tema disponible (por ejemplo, Java, Spring, DevOps, etc.).
  2. 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.
  3. 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).
  4. Evaluación de resultados: el sistema debe analizar cada intento y determinar si el usuario acertó la palabra o si continúa la partida.
  5. 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).
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. Finalización de la partida: al concluir una partida, el sistema debe mostrar un mensaje de resultado y permitir iniciar una nueva.

Requerimientos de controladores

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 ResponseEntity y retornar respuestas con los códigos HTTP adecuados según el resultado de cada operación.

Requerimientos de vista

  • 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.

Requerimientos de persistencia

  • 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.sql y data.sql dentro del directorio resources.
  • El acceso a los datos debe implementarse mediante Spring JDBC, utilizando JdbcTemplate para 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.

Requerimientos de pruebas unitarias

  • 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.

Requerimientos de documentación

  • 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.


Estructura del proyecto

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment