Proyecto para Tópicos Especiales de Programación (TEP) en el Semestre Sep24-Ene25, Seccion 2 (16012) por parte del Grupo 1(Gabriel Castellano, Massiel Perozo, Jesus Gil)
Este proyecto se basa en la integración con las siguientes dos APIs:
- Metodología: Desarrollo basado en pruebas (TDD).
- Flujo de trabajo: GitFlow.
- Documentación: Documentación de la API en Swagger.
- Tecnologías:
Se necesitará crear un repositorio en GitHub, donde se subirá el código del proyecto, el cual debe estar en la rama main para su entrega. El repositorio seguirá el flujo de GitFlow. El lenguaje a utilizar como base será Node.js (última versión LTS) con su framework Express.js y con la base de datos MongoDb.
Se estarán evaluando: El funcionamiento de los 7 requerimientos mandatorios. Las pruebas unitarias usando el flujo de TDD. La documentación hecha en Swagger de los endpoints. Claridad del código y comentarios en el mismo (porque lo voy a revisar). Integración con las siguientes dos API's: https://api.chucknorris.io/ https://icanhazdadjoke.com/api Flujo de ramas y commits siguiendo el flujo de GitFlow.
Participación de los 3 integrantes en el proyecto, cada uno debe hacer mínimo de 2 de los requerimientos quedando 1 extra para uno, por tanto deben tener cada 1 mínimo de 2 ramas creadas y 2 pull request a develop creados. Documentación del proyecto en el READme para saber como correr el proyecto, dificultades, comentarios extras, que utilizaron, etc. (dado que el proyecto se correrá en mi maquina). Uso correcto de los códigos HTTP.
Endpoint: GET /joke/:type
Obtiene un chiste basado en el tipo especificado en el parámetro de la URL.
- Parámetros:
type
(string): Puede ser "Chuck", "Dad" o "Propio".- "Chuck": Obtiene un chiste de la API de Chuck Norris.
- "Dad": Obtiene un chiste de la API de Dad Jokes.
- "Propio": Obtiene un chiste de la base de datos interna. Si no hay chistes, retorna el mensaje "Aun no hay chistes, cree uno!".
- Cualquier otro valor retorna un error.
Endpoint: POST /joke
Guarda un chiste en la base de datos.
-
Cuerpo de la solicitud:
texto
(string, requerido): Texto del chiste.autor
(string, opcional): Nombre de quien escribió el chiste. Si no se proporciona, se asigna "Se perdió en el Ávila como Led".puntaje
(number, requerido): Puntaje del 1 al 10 para saber qué tan bueno es el chiste.categoria
(string, requerido): Categoría del chiste. Valores permitidos: "Dad joke", "Humor Negro", "Chistoso", "Malo".
-
Respuesta:
- Retorna el ID del chiste creado.
Endpoint: PUT /joke/:id
Actualiza los campos de un chiste existente basado en su ID.
-
Parámetros:
id
(string): ID del chiste a actualizar.
-
Cuerpo de la solicitud:
- Cualquier campo mencionado en el endpoint de creación de chistes, excepto el ID.
Endpoint: DELETE /joke/:id
Elimina un chiste basado en su ID.
- Parámetros:
id
(string): ID del chiste a eliminar.
Endpoint: GET /joke/:id
Obtiene un chiste basado en su ID.
-
Parámetros:
id
(string): ID del chiste a obtener.
-
Respuesta:
- Si el chiste no existe, retorna un error.
Endpoint: GET /jokes/count/:categoria
Obtiene la cantidad de chistes en la base de datos por categoría.
-
Parámetros:
categoria
(string): Categoría de los chistes a contar.
-
Respuesta:
- Si no existen chistes en la categoría especificada, retorna un mensaje de error.
Endpoint: GET /jokes/score/:puntaje
Obtiene todos los chistes en la base de datos con un puntaje específico.
-
Parámetros:
puntaje
(number): Puntaje de los chistes a obtener.
-
Respuesta:
- Si no existen chistes con el puntaje especificado, retorna un mensaje de error.
Si no tienes instalado Node ni MongoDB localmente, puedes dirigirte a:
https://github.com/Jrgil20/mongodb-codespaces
-
Clona o haz un fork del repositorio, o crea un codespace como invitado.
-
Una vez en el codespace, trae el otro repositorio:
git clone https://github.com/Jrgil20/TEP_Proyecto_202515-16012_G1.git
-
Accede a la carpeta:
cd TEP_Proyecto_202515-16012_G1
-
Crea el archivo
.env
con:PORT=3000 MONGODB_URI=mongodb://localhost:27017/JokeAppDB # o la conexión que prefieras
-
Configura la conexión desde la extensión de MongoDB. MONGODB_URI=mongodb://localhost:27017/JokeAppDB
-
Instala las dependencias:
npm install && npm install axios
-
Para probar tu configuración:
npm test
-
Para ejecutar el servidor:
node server
Con estas instrucciones, tendrás un entorno remoto o local configurado para desarrollar y probar el proyecto.
Para instalar y ejecutar el proyecto localmente, sigue estos pasos:
-
Clona el repositorio:
git clone https://github.com/tu-usuario/Proyecto-TEP24.git
-
Navega al directorio del proyecto:
cd Proyecto-TEP24
- Instala las dependencias:
npm install
- Configura las variables de entorno según el archivo
.env.example
.
Para iniciar MongoDB y ejecutar el programa, sigue estos pasos:
-
Inicia MongoDB:
-
Abre una terminal o línea de comandos.
-
Ejecuta el siguiente comando para iniciar el servicio de MongoDB:
mongod
-
Si MongoDB no está en tu PATH, es posible que necesites navegar al directorio de instalación de MongoDB primero.
-
Deja esta terminal abierta para mantener MongoDB en ejecución.
-
En una nueva terminal, navega al directorio del proyecto si aún no lo has hecho:
cd Proyecto-TEP24
- Crea un archivo
.env
en la raíz del proyecto con el siguiente contenido:
PORT=3000
MONGODB_URI=mongodb://localhost:27017/JokeAppDB
- Inicia el servidor con el siguiente comando:
npm start
- Deberías ver un mensaje indicando que el servidor está corriendo y la base de datos está conectada.
- Abre tu navegador y visita
http://localhost:3000
para acceder a la aplicación. - La documentación de la API está disponible en
http://localhost:3000/api-docs
.
Para ejecutar las pruebas unitarias, usa:
npm test
La documentación de los endpoints está disponible en Swagger. Para acceder a ella, inicia el servidor y navega a http://localhost:3000/api-docs
.
Para contribuir al proyecto, sigue estos pasos:
- Crea una nueva rama:
git checkout -b nombre-de-tu-rama
- Realiza tus cambios y haz commit:
git commit -m "Descripción de los cambios"
- Sube tus cambios a tu repositorio remoto:
git push origin nombre-de-tu-rama
- Crea un Pull Request hacia la rama
develop
.
Este proyecto está bajo la Licencia MIT.