Parcial Número 2
Api Rest con [Link], Express y MongoDB
Descripción General
Se le solicita crear una API rest que tendrá 2 EndPoints (rutas) como mínimo:
1. Una ruta que gestionará los datos de usuario. Desde donde el usuario se podrá registrar, modificar sus
datos, eliminar su cuenta, realizar el login, cambiar su contraseña.
2. Una ruta que gestionará las consultas realizadas por los usuarios a la API de ChatGPT. Desde la cual se
podrá registrar en una colección todos los datos de las consultas realizadas a esta API.
Detalles técnicos
El proyecto debe tener la estructura de un proyecto en express.
Se deben importar como mínimo los siguientes módulos de [Link]
o express: módulos de express
o mongoose: módulos de mongodb
o jsonwebtoken: manejo de los json web tokens
o dotenv: Manejo de archivo de configuración
o bcryptjs: cifrado de datos
o axios: Ejecución de Apis externas.
La API tendrá dos rutas
o /user: Desde donde se gestionará todo lo necesario al usuario
o /chatgpt: Desde donde se gestionará todo lo necesario para manejar las consultas a la API.
Se tendrán dos colecciones como mínimo (cualquier otra colección queda a su criterio) que tendrán la
siguiente estructura:
Nombre de Colección: user
Campos Tipo de dato Descripción
_id Object ID autogenerado por mongodb
user String Usuario para loguearse.
salt String Salt para cifrar la contraseña.
password String Contraseña Cifrada con el salt utilizando el método Hash o
hashSync.
name String Nombre Completo del usuario
date_create Date Hora fecha en que se registra el usuario
Nombre de Colección: chatgpt
Campos Tipo de dato Descripción
_id Object ID autogenerado por mongodb
prompt String Consulta realizada a la API de ChatGPT
response String Respuesta obtenida de a API de ChatGPT
id_user String Es el ID del usuario que registra realiza la consulta
date_create Date Hora fecha en que se realiza la consulta
La ruta /user tendrá las siguientes rutas:
Ruta Método Descripción
/login POST Recibe un json con campos “user” y “password” sin cifrar. En este método, si el
user y password existen en la base de datos, se debe devolver el token de
autentificación.
/:id GET Extrae un usuario específico. Debe devolver un json del usuario buscado. Debe
recibir el token de autorización.
/ POST Recibe un json con los campos user, password, name para realizar el ingreso de
los datos. El campo date_create debe calcularse en el método utilizando la
función de javascript Date(). El salt debe generarse con la función saltSync. Y el
password se debe guardar con la función hashSync.
/:id PUT Recibe un json con los campos user, password, name y el parámetro _ID del
registro para realizar la actualización de los datos. Debe recibir el token de
autorización.
/:id DELETE Recibe un parámetro con el _ID del usuario a eliminar. Debe recibir el token de
autorización.
La ruta /chatgpt tendrá las siguientes rutas:
Ruta Método Descripción
/ POST Recibe un json con los datos prompt, response, id_user y lo almacena en la
colección. Estos datos se generan una vez la API de ChatGPT responde la
petición. Debe recibir el token de autorización.
/:id GET Recibe un id de un chat y devuelve un json con el registro que coincida.
/user/:id_user GET Recibe un id con el id del usuario que registro el chat, devuelve todos los
registros de ese usuario buscando por el campo utilizando el método find.
La base de datos debe estar en MongoAtlas.
En el archivo de configuración .env se deben guardar los datos como: Puerto de la aplicación, url de la
base de datos, apiUrl (Es la url de la API de CHATGPT), apiKey (es la ApkiKey de su cuenta de OpenAI),
Clave secrete de Json web token, y cualquier otro valor fijo que tenga en el código.
Se deben crear los siguientes Middleware:
o ValidateUser: Permite validar los datos antes de registrar el usuario en la ruta post /user/.
o ValidateLogin: Permite validar que tanto el usuario y la contraseña son ingresados en la ruta
post user/login
o ValidateToken: Valida el token de autentificación
o ValidatePrompt: Valida que se introduzca un promt valido en la ruta POST /chatgpt/
o RegAcces: Es un middelware que se encarga de escribir en un archivo llamado [Link] en la
raíz donde guardará la hora y el campo [Link] de cada petición realizada. Debería
verse de la siguiente manera:
Utilizando el método appendFileSync importando el módulo const fs = require("fs").
Fecha de Entrega: Domingo 18 de Junio a las 23:59
Fecha de Sustentación: Lunes 19 de Junio del 2023