Skip to content

Creación de una API RESTful que permite a un administrador ingresar datos de usuarios desde un archivo CSV.

Notifications You must be signed in to change notification settings

carusi99/files-csv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Files CSV

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.

Tabla de Contenidos

  1. Requisitos
  2. Instalación
  3. Configuración
  4. Endpoints
  5. Ejemplos de Solicitudes
  6. Autenticación
  7. Contribuciones
  8. Licencia

Requisitos

Es necesario tener Node.js, npm, y PostgreSQL instalados en tu entorno de desarrollo.

dependencias utilizadas

"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"

Instalación

  1. Clona este repositorio:
git clone https://github.com/carusi99/files-csv.git
cd red-social-api
  1. Instala las dependencias:
npm install
  1. Configura la conexión a la base de datos en el archivo .env, se muestra un ejemplo en el archivo .env.example .
  2. Ejecuta un reset de las migraciones con umzug:
npm run db:reset
  1. Inicia el servidor:
npm run dev

Configuración

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.

ejemplo:

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

Estructura del proyecto

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.

Endpoints

POST /signup (Crear Cuenta)

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

POST /login (Iniciar Sesión)

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

PATCH /change/:id (Editar Cliente)

  • 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

DELETE /:id (Eliminar un Cliente)

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

Gestión de ingreso de usuarios

POST / upload (Archivo CSV)

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

Ejemplos de solicitudes

Registro y Autenticación de Usuarios

POST /signup (Crear Cuenta)
  • 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"
  }
}
POST /login (Iniciar Sesión)
  • 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..."
        }
      }
PATCH /change/:id (editar datos del Cliente)
  • 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
 }
}
DELETE /:id (Eliminar un Cliente)
  • 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",
}

Gestión de Archivos CSV

POST /upload (ver archivos preocesados y no procesados)

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 en file colocar el nombre del campo del formulario que se va a procesar y seleccionar el archivo csv, además es necesario que en Auth, luego en bearer, proporcionar el token del usuario admin.

Ejemplo:

image

image

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"
        }
      }
    ]
  }
}

Autenticación

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.

Cómo Funciona

  1. 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.
  2. 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.
  3. 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.
  4. 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.

¿Cómo puedo hacer test de la API?

Puedes probar la funcionalidad de los puntos finales implementando las bibliotecas Vitest y SuperTest.

npm run test

Contribuciones

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]

About

Creación de una API RESTful que permite a un administrador ingresar datos de usuarios desde un archivo CSV.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published