API Impositus es una API RESTful que permite la administración de documentos y la gestión de bases de datos. Esta API está diseñada para facilitar la creación, lectura, actualización y eliminación de documentos en una base de datos, así como la gestión de usuarios y roles. Administra tambien los documentos de los usuarios, permitiendo la carga y descarga de archivos. La API también incluye un sistema de autenticación y autorización para garantizar la seguridad de los datos. Cuenta con un sistema de notificaciones por correo electrónico para informar a los usuarios sobre eventos importantes relacionados con sus documentos. Procesa documentos por medio de OpenAI, permitiendo la generación de documentos a partir de plantillas y la extracción de datos relevantes de los mismos.
- Node.js
- Express
- AWS SDK
- sequelize
- multer
- uuid
- nodemailer
- redis
Esta API utiliza varios servicios de AWS para su funcionamiento. Utiliza S3 para el almacenamiento de documentos y DynamoDB para la gestión de datos. La API está diseñada para ser escalable y eficiente, aprovechando la infraestructura de AWS para garantizar un rendimiento óptimo. A continuación se detallan los servicios utilizados:
- S3: Almacenamiento de documentos
- DynamoDB: Gestión de datos
La API utiliza una base de datos SQL para almacenar la información de los usuarios, roles y documentos.
users: Almacena la información de los usuarios, incluyendo su nombre, correo electrónico y contraseña.roles: Almacena la información de los roles, incluyendo su nombre y permisos.documents: Almacena la información de los documentos, incluyendo su nombre, tipo y ubicación en S3.misdocumentos: Almacena la información de los documentos de los usuarios.
La API utiliza una base de datos PostgreSQL para almacenar los vectores de los documentos. Esta base de datos es utilizada para la búsqueda y recuperación de documentos, así como para la gestión de usuarios y roles. Se usa OpenAI para la generación de vectores a partir de los documentos, lo que permite una búsqueda eficiente y precisa.
La API utiliza Redis para el almacenamiento en caché de los datos. Esto permite una recuperación rápida de la información y mejora el rendimiento general de la API.
El servidor permite la carga de documentos en varios formatos, incluyendo:
- DOCX
- txt
Los documentos se cargan a través de una solicitud POST a la ruta /api/v1/**, donde se envía el archivo y la información del usuario. La API procesa el documento y lo almacena en S3, generando un enlace de descarga que se devuelve al usuario.
La API también genera un vector del documento utilizando OpenAI, lo que permite una búsqueda eficiente y precisa de los documentos.
Se utiliza Multer para la carga de archivos y se almacena el archivo en S3. La API también incluye un sistema de autenticación y autorización para garantizar la seguridad de los datos.
impositus-api/
│
├── src/
│ ├── index.js # Punto de entrada del servidor
│ ├── app.js # Configuración Express, middlewares globales
│
│ ├── config/ # Configuración de servicios
│ │ ├── aws.js # Conexión AWS (S3, DynamoDB)
│ │ ├── redis.js # Cliente Redis
│ │ ├── pg.js # Cliente PostgreSQL
│ │ └── openai.js # Cliente OpenAI
│
│ ├── routes/ # Rutas del API
│ │ ├── documents.routes.js
│ │ ├── upload.routes.js
│ │ ├── search.routes.js
│ │ └── users.routes.js
│
│ ├── controllers/ # Lógica por endpoint
│ │ ├── documents.controller.js
│ │ ├── upload.controller.js
│ │ ├── search.controller.js
│ │ └── users.controller.js
│
│ ├── services/ # Servicios conectados a AWS, DB, Redis, OpenAI
│ │ ├── s3.service.js
│ │ ├── dynamodb.service.js
│ │ ├── redis.service.js
│ │ ├── pg.service.js
│ │ ├── openai.service.js
│ │ └── embedding.service.js
│
│ ├── middlewares/
│ │ ├── auth.middleware.js
│ │ ├── errorHandler.js
│ │ └── upload.middleware.js
│
│ ├── utils/
│ │ ├── parser.js # Procesamiento de texto de PDF/DOCX
│ │ └── helper.js
│
│ └── models/ # Estructuras para Dynamo, opcional para ORM
│ ├── user.model.js
│ ├── role.model.js
│ └── document.model.js
│
├── uploads/ # Carpeta temporal si se usa almacenamiento local
├── scripts/ # Scripts utilitarios: generación de embeddings, etc
├── .env
├── package.json
└── README.md