{"id":24531992,"url":"https://github.com/mateogiuffra/ouijpers-deploy","last_synced_at":"2026-01-01T21:59:43.839Z","repository":{"id":265969414,"uuid":"896138434","full_name":"MateoGiuffra/ouijpers-deploy","owner":"MateoGiuffra","description":"Ouijpers es un juego inspirado en el ahorcado, donde los jugadores deben adivinar palabras para salvar sus almas. Desarrollado con Java 21, Spring Boot, Firebase Firestore y MySQL, el juego utiliza una API REST para gestionar jugadores y partidas en tiempo real.","archived":false,"fork":false,"pushed_at":"2024-12-29T02:31:05.000Z","size":101,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-15T20:16:22.106Z","etag":null,"topics":["firebase","firebase-database","java","mysql","spring","spring-boot","website"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MateoGiuffra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-29T16:15:32.000Z","updated_at":"2024-12-29T02:35:20.000Z","dependencies_parsed_at":"2024-12-01T21:23:13.237Z","dependency_job_id":"f3cd6d4c-18ee-42cb-9708-85a24f37e41d","html_url":"https://github.com/MateoGiuffra/ouijpers-deploy","commit_stats":null,"previous_names":["mateogiuffra/ouijpers-deploy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MateoGiuffra/ouijpers-deploy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MateoGiuffra%2Fouijpers-deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MateoGiuffra%2Fouijpers-deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MateoGiuffra%2Fouijpers-deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MateoGiuffra%2Fouijpers-deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MateoGiuffra","download_url":"https://codeload.github.com/MateoGiuffra/ouijpers-deploy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MateoGiuffra%2Fouijpers-deploy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28164147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2026-01-01T02:00:06.694Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["firebase","firebase-database","java","mysql","spring","spring-boot","website"],"created_at":"2025-01-22T09:17:05.556Z","updated_at":"2026-01-01T21:59:43.810Z","avatar_url":"https://github.com/MateoGiuffra.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ouijpers: Un juego entre la vida y la muerte\n\nEste repositorio contiene el código fuente de **Ouijpers**, una implementación basada en un juego inspirado en \"el ahorcado\". Aquí, el objetivo es sobrevivir a un desafío demoníaco, recuperar las partes perdidas del brazo de RDJ y salvar nuestras almas en el proceso. Este proyecto combina el uso de tecnologías modernas como **Firebase Firestore** para datos en tiempo real y **MySQL** para la persistencia del juego.\n\n## **Descripción del proyecto**\nEl juego se desarrolla en tres rondas de dificultad creciente, con palabras que los jugadores deben adivinar letra por letra. Cada error cuesta intentos, y cada éxito otorga puntos. El destino del jugador y de RDJ depende de su habilidad para superar los desafíos planteados por los espíritus demoníacos.\n\n## **Características principales**\n- **Persistencia en Firebase Firestore** para almacenar y actualizar jugadores en tiempo real.\n- **Base de datos MySQL** para gestionar los juegos, incluyendo rondas, intentos y palabras a adivinar.\n- **Actualización en tiempo real** y **API REST** desarrollada en **Spring Boot**.\n- **Servicios y controladores** que cumplen con los principios de diseño SOLID y arquitectura limpia.\n\n---\n\n## **El lore de Ouijpers**\nLa historia comienza cuando RDJ nos encomienda una misión para recuperar las partes de su brazo, en manos de espíritus demoníacos que juegan con ellas. Los espíritus proponen un juego: “Ouijpers”, un desafío que pone en riesgo nuestras almas si no logramos adivinar sus palabras dentro de un límite de intentos. Solo ganando este juego diabólico podremos recuperar el brazo perdido y nuestras almas.\n\n---\n\n## **Modelo del juego**\n### **Jugador**\nLa clase Jugador maneja la información básica del jugador:\n- `String nombre`: el nombre del jugador.\n- `int puntaje`: el puntaje acumulado del jugador.\n\n### **Juego**\nUn juego consta de:\n- Tres rondas con palabras de dificultad creciente.\n- Hasta 6 intentos por ronda.\n- Puntos otorgados:\n  - 1 punto por letra correcta.\n  - 5 puntos por palabra acertada.\n\n---\n\n## **Servicios**\n### **JugadorService**\nGestión de jugadores utilizando **Firestore**:\n- **CRUD básico.**\n- Métodos adicionales:\n  - `Mono\u003cJugador\u003e adivinarLetra(Jugador jugador, Character letra, Juego juego)`: Actualiza el puntaje del jugador tras un intento.\n  - `Mono\u003cInteger\u003e obtenerPuntaje(String nombre)`: Devuelve el puntaje total de un jugador.\n  - `Flux\u003cJugador\u003e obtenerRanking()`: Proporciona un ranking de jugadores ordenado por puntaje.\n\n### **JuegoService**\nGestión de juegos utilizando **MySQL**:\n- **CRUD básico.**\n- Métodos adicionales:\n  - `int cantIntentosRestantes(Long id)`: Devuelve intentos restantes de la ronda actual.\n  - `String palabraAdivinando(Long id)`: Muestra la palabra a adivinar (progresivamente).\n  - `String letrasEquivocadas(Long id)`: Lista letras incorrectas.\n  - `String rondaActual(Long id)`: Indica la ronda actual.\n  - `Jugador empezarJuego(String nombre)`: Crea un nuevo juego y jugador.\n\n---\n\n## **Endpoints disponibles**\nEl proyecto incluye controladores REST con los siguientes endpoints:\n\n### **Jugador**\n- `POST /jugador`: Crear un jugador.\n- `GET /jugador/{nombre}`: Buscar un jugador por su nombre.\n- `GET /jugador/ranking`: Obtener el ranking de jugadores.\n- `PUT /jugador/{nombre}/adivinarLetra/{letra}`: Adivinar una letra y actualizar el puntaje.\n- `GET /jugador/{nombre}/puntaje`: Obtener el puntaje de un jugador.\n\n### **Juego**\n- `POST /juego`: Iniciar un nuevo juego.\n- `GET /juego/{id}/intentosRestantes`: Consultar intentos restantes.\n- `GET /juego/{id}/palabra`: Consultar la palabra que se está adivinando.\n- `GET /juego/{id}/letrasEquivocadas`: Consultar letras incorrectas.\n- `GET /juego/{id}/rondaActual`: Consultar la ronda actual.\n\n---\n\n## **Tecnologías utilizadas**\n- **Java 21** con **Spring Boot 3.1.1**\n- **Firebase Firestore** para almacenamiento en tiempo real.\n- **MySQL** como base de datos relacional.\n- **Railway** como plataforma para el despliegue.\n- **Gradle** para la gestión de dependencias.\n\n---\n\n## **Despliegue**\nEste proyecto está desplegado en Railway y puede ser accedido públicamente. Para contribuir o realizar pruebas, sigue estos pasos:\n\n### **Configuración local**\n1. Clona este repositorio:\n   ```bash\n   git clone https://github.com/tu-repo/ouijpers.git\n   ```\n2. Crea el archivo `.env` en la carpeta raiz y configuralo con las siguientes variables:\n   ```env\n   PORT=8080\n   DB_USER=tu_usuario\n   DB_PASSWORD=tu_contraseña\n   DB_HOST=localhost\n   DB_PORT=3306\n   DB_NAME=tu_base_de_datos\n   DB_KEY=json_de_firebase\n   ```\n3. Ejecuta la aplicación:\n   ```bash\n   ./gradlew bootRun\n   ```\n\n---\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmateogiuffra%2Fouijpers-deploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmateogiuffra%2Fouijpers-deploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmateogiuffra%2Fouijpers-deploy/lists"}