Este proyecto presenta una API RESTful que simula un ámbito de trabajo para el ingreso de datos de usuarios , permitiendo a un "admin", insertar los usuarios desde un archivo csv. La API maneja diferentes operaciones basadas en la autenticación y la autorización del usuario.
- Requisitos
- Instalación
- Configuración
- Endpoints
- Ejemplos de Solicitudes
- Autenticación
- Contribuciones
- Licencia
Es necesario tener Node.js, npm, y PostgreSQL instalados en tu entorno de desarrollo.
"dependencies"
- "@types/cors": "^2.8.17",
- "@types/multer": "^1.4.11",
- "bcrypt": "^5.1.1",
- "cors": "^2.8.5",
- "csv-parse": "^5.5.6",
- "dotenv": "^16.3.1",
- "express": "^4.19.2",
- "jsonwebtoken": "^9.0.2",
- "multer": "^1.4.5-lts.1",
- "pg": "^8.11.5",
- "umzug": "^3.8.0",
- "vitest": "^1.6.0",
- "zod": "^3.23.4"
- Clona este repositorio:
git clone https://github.com/carusi99/files-csv.git
cd red-social-api
- Instala las dependencias:
npm install
- Configura la conexión a la base de datos en el archivo .env, se muestra un ejemplo en el archivo .env.example .
- Ejecuta un reset de las migraciones con umzug:
npm run db:reset
- Inicia el servidor:
npm run dev
Para configurar correctamente tu entorno de desarrollo, necesitarás crear un archivo .env
en la raíz del proyecto y establecer las siguientes variables de entorno.
# Contenido del archivo .env
# Configuración de la base de datos PostgreSQL
DB_HOST=localhost
DB_NAME=mi_base_de_datos
DB_PORT=5432
DB_USER=mi_usuario
DB_PASSWORD=mi_contraseña
DB_ADMIN_DATABASE=mi_database_admin
# Configuración del token JWT
JWT_SECRET=mi_secreto
COST_FACTOR=10
Asegúrate de proporcionar valores específicos para cada variable según los requisitos de tu aplicación.
La aplicación sigue una arquitectura de tres capas:
- Routers: Define las rutas y maneja las solicitudes HTTP.
- Servicios: Contiene la lógica de negocio y se comunica con la capa de acceso a datos.
- Acceso a Datos: Gestiona las interacciones con la base de datos PostgreSQL utilizando pg.
- Descripción: Permite a un nuevo usuario registrarse en la plataforma.
- Body:
name
,password
,email
,role
- Campos requeridos para el registro. - Respuesta: Crea una nueva cuenta y devuelve la información del usuario registrado.
- Descripción: Permite a un usuario existente iniciar sesión.
- Body:
password
,email
- Credenciales requeridas para el inicio de sesión. - Respuesta: Inicia sesión y devuelve un token JWT.
- Descripción: Permite al usuario autenticado y autorizado editar información de perfil del cliente.
- Body: Permite actualizar campos como
email
,name
,age
. - Respuesta: Actualiza
- Descripción: Permite a un usuario autenticado y autorizado eliminar un usuario de client.
- Respuesta: Elimina el "usuario(id)" de la tabla y devuelve "ok": true.
- Descripción: Permite a un usuario autenticado y autorizado con el rol de admin, ingresar usuarios a la base de datos.
- body: En thunder client de visual studio code, puedes ingresar a
form
y en file colocar el name y seleccionar el archivo csv - Respuesta: Se muestran los usuarios ingresados correctamente que se incorporan a la base de datos y los que no ingresan por errores al traspasarlos.
- Descripción: Permite a un nuevo usuario registrarse en la plataforma.
- Body:
name
,password
,email
,role
: Campos requeridos para el registro.
- Respuesta:
201 Created
: usuario registrado exitosamente.400 Bad Request
: Si falta información o el formato es incorrecto.- Ejemplo de Respuesta:
{
"ok": true,
"message": "Usuario registrado exitosamente",
"data": {
"id": 9,
"name": "viviana",
"email": "[email protected]",
"role": "admin"
}
}
- Descripción: Permite a un usuario existente iniciar sesión.
- Body:
password
,email
: Credenciales requeridas para el inicio de sesión.
- Respuesta:
200 OK
: Sesión iniciada, retorna token JWT.401 Unauthorized
: Credenciales incorrectas.- Ejemplo de Respuesta:
{ "ok": true, "data": { "token": "eyJhbGciOiJIUzI1NiIsInR5..." } }
- Descripción: Permite a un usuario hacer cambios en el cliente.
- Body:
password
,email
,name
,age
: todas opcionales
- Respuesta:
200 OK
: "User updated successfully".401 Unauthorized
:"Unauthorized"
{
"ok": true,
"message": "User updated successfully",
"data": {
"id": 37,
"name": "laptop",
"email": "[email protected]",
"age": 24
}
}
- Descripción: Permite a un usuario eliminar un cliente.
- Parámetros:
change
: ID del Cliente.
- Respuesta:
-
200 OK
: eliminado. -
401 Unauthorized
: Si el usuario no está autenticado. -
Ejemplo de Respuesta:
-
{
"ok": true,
"message": "User deleted successfully",
}
Descripción: Muestra el perfil de los usuarios que están igresados de manera correcta a la base de datos, y los que no.
- Body:
- En thunder client de visual studio code, puedes ingresar a
form
y enfile
colocar el nombre del campo del formulario que se va a procesar y seleccionar el archivo csv, además es necesario que enAuth
, luego enbearer
, proporcionar el token del usuarioadmin
.
- En thunder client de visual studio code, puedes ingresar a
Respuesta:
- 200 OK: Información de los perfiles en formato JSON (correctos y con errores).
- 401 Unauthorized: Si el usuario no está autenticado ni autorizado.
Ejemplo de Respuesta:
{
"ok": true,
"data": {
"success": [
{
"name": "Juan Perez",
"email": "[email protected]",
"age": 28,
"role": "user"
},
{
"name": "Maria Lopez",
"email": "[email protected]",
"age": 35,
"role": "user"
},
{
"name": "Carlos Gomez",
"email": "[email protected]",
"age": 42,
"role": "user"
},
{
"name": "Ana Martinez",
"email": "[email protected]",
"age": 30,
"role": "user"
},
{
"name": "Roberto Hernandez",
"email": "[email protected]",
"age": 18,
"role": "user"
},
{
"name": "Luisa Fernandez",
"email": "[email protected]",
"age": 50,
"role": "user"
}
],
"errors": [
{
"row": 5,
"details": {
"name": "The 'name' field cannot be a number or empty string",
"email": "Email format is invalid, missing @"
}
},
{
"row": 8,
"details": {
"name": "The 'name' field cannot be a number or empty string",
"email": "Email format is invalid, missing @",
"age": "Expected number, received nan"
}
},
{
"row": 9,
"details": {
"name": "The 'name' field cannot be a number or empty string",
"email": "Email format is invalid, missing @",
"age": "The 'age' field must be a positive number"
}
}
]
}
}
En este proyecto, utilizamos JSON Web Token (JWT) para gestionar la autenticación. JWT es un estándar abierto (RFC 7519) que define una forma compacta y autónoma de transmitir información de manera segura entre las partes como un objeto JSON. En el contexto de la autenticación, JWT se utiliza para generar tokens que pueden ser verificados para asegurar la identidad del usuario.
-
Generación del Token:
- Cuando un usuario se autentica con éxito, se genera un JWT que contiene información sobre el usuario y posiblemente otros datos relevantes.
-
Envío del Token:
- El token JWT se envía al cliente, generalmente como parte de la respuesta después de una autenticación exitosa.
-
Almacenamiento del Token:
- El cliente almacena el token, generalmente en el almacenamiento local o en las cookies, para incluirlo en las solicitudes posteriores a recursos protegidos.
-
Verificación del Token:
- En cada solicitud a un recurso protegido, el servidor verifica la validez del token JWT recibido. Si el token es válido, se permite el acceso al recurso protegido.
Puedes probar la funcionalidad de los puntos finales implementando las bibliotecas Vitest y SuperTest.
npm run test
Si deseas contribuir al desarrollo de esta API, simplemente realiza un Pull Request con tus cambios y para que sean revisados, además me puedes contactar, con gusto te responderé [email protected]