API robusta para la gestión de clientes y trabajos en un sistema de presupuestos y seguimiento de pagos, desarrollada con Node.js y MongoDB. Esta API permite a los talleres de herrería organizar eficientemente sus operaciones, brindando un control detallado sobre los clientes, la creación de trabajos personalizados, la generación de presupuestos con desglose de materiales y costos, y el seguimiento de los pagos asociados. Pensada para integrarse fácilmente con aplicaciones frontend, esta API maneja autenticación segura, administración de roles, y validación de datos, garantizando tanto la seguridad como la precisión en cada interacción. Además, el sistema es escalable, lo que facilita su personalización y expansión para adaptarse a las crecientes necesidades del taller.
git clone https://github.com/tuusuario/tu-repo.git
cd tu-reponpm installPORT= Numero del puerto con el que se hara conexion
MONGO_URL= String de conexion a la base de datos con la cual se va a trabajar
PRIVATE_KEY= Clave privada
PASS_DEFAULT= Clave por defecto
ENT= Tipo de entorno de trabajonpm start-
POST /api/sessions/login - Inicia sesión y devuelve un token.
{ "email": "user@example.com", "password": "yourpassword" } - POST /api/sessions/logout - Cierra la session y destruye el token de acceso.
- GET /api/users - Devuelve la lista de usuarios.
- GET /api/users/:uid - Devuelve los detalles de un usuario específico.
- POST /api/users/email - Devuelve los detalles de un usuario específico por su email.
-
POST /api/users - Crea un nuevo usuario.
{ "name": "Julieta", "lastName": "Ballon", "phone": "3415678765", "email": "user@example.com", "password": "yourpassword" } - PUT /api/users/:uid - Actualiza la información de un usuario específico.
- DELETE /api/users/:uid - Elimina un usuario específico.
- GET /api/clients - Devuelve la lista de clientes
- GET /api/clients/:cid - Devuelve los detalles de un cliente específico.
- POST /api/clients/phone - Devuelve los detalles de un cliente específico por su telefono.
-
POST /api/clients - Crea un nuevo cliente.
{ "name": "Julieta", "lastName": "Ballon", "address": "Italia 3040", "phone": "3415678765" } - PUT /api/clients/:cid - Actualiza la información de un cliente específico.
- DELETE /api/clients/:cid - Elimina un cliente específico.
- GET /api/jobs - Devuelve la lista de trabajos.
- GET /api/jobs/:jid - Devuelve los detalles de un trabajo específico.
-
POST /api/jobs/:cid - Crea un nuevo trabajo.
{ "details": "Breve detalle del trabajo" } -
PUT /api/jobs/:jid - Actualiza la información de un trabajo específico.
{ "details": "Breve detalle del trabajo", "isFinished": true, "budgetAccepted": true } - DELETE /api/jobs/:jid - Elimina un trabajo específico.
- GET /api/budgets - Devuelve la lista de presupuestos.
- GET /api/budgets/:bid - Devuelve los detalles de un presupuesto específico.
-
PUT /api/budgets/:bid - Actualiza la información de un presupuesto específico.
{ "labourCost": "Costo que tendra el trabajo" } -
PUT /api/budgets/material/:bid - Actualiza la información de un material dentro de un presupuesto específico.
{ "materialName": "Nombre del material", "amount": "Cantidad de material", "price": "Precio unitario del material" } - GET /api/budgets/remove/:bid - Elimina un material dentro de unp presupuesto específico.
- GET /api/payments - Devuelve la lista de pagos.
- GET /api/payments/:pid - Devuelve los detalles de un pago específico.
-
POST /api/payments/:bid - Registra un nuevo pago.
{ "amount": "Monto pagado", "paymentMethod": "Metodo de pago", "notes": "Nota sobre el pago si es necesario" } -
PUT /api/payments/:pid - Actualiza la información de un pago específico.
{ "amount": "Monto pagado", "paymentMethod": "Metodo de pago", "notes": "Nota sobre el pago si es necesario" } - DELETE /api/payments/:pid - Elimina un pago específico.
- GET /api/invoices/:cid - Confecciona una factura con los datos completos del cliente, trabajos, presupuestos, materiales y pagos.
- Node.js - Entorno de ejecución de JavaScript en el servidor.
- Express - Framework web para Node.js, que facilita la creación de aplicaciones y APIs.
- Mongoose - ODM (Object Data Modeling) para MongoDB y Node.js, que simplifica la interacción con la base de datos.
- Bcrypt - Librería para encriptar contraseñas.
- JWT (JSON Web Token) - Para gestionar autenticación y autorización en aplicaciones web.
- Passport - Middleware para autenticación en Node.js, compatible con diferentes estrategias.
- Mocha - Framework de pruebas para Node.js.
- Chai - Librería de aserciones para Mocha, que facilita la escritura de pruebas.
- Swagger - Herramientas para documentar y diseñar APIs.
- PDFKit - Librería para generar documentos PDF en Node.js.
- CORS - Middleware que permite controlar el acceso de recursos entre dominios.
- Dotenv - Carga variables de entorno desde un archivo `.env`.
- Commander - Para crear interfaces de línea de comandos (CLI) en Node.js.
- Cookie-parser - Middleware para parsear cookies en las solicitudes.
- Yamljs - Librería para trabajar con archivos YAML en JavaScript.
- Supertest - Librería para realizar pruebas de integración HTTP.
- Winston - Librería de registro para aplicaciones Node.js.
- Concurrently - Permite ejecutar múltiples comandos de forma concurrente en la terminal.
src/
│
├── assets/
│ ├── fonts/
│ └── images/
│
│── config/
│
├── controllers/
│
├── DAOs/
│ ├── mongo/
│ │ ├── budgets.mongo.js
│ │ ├── clients.mongo.js
│ │ ├── jobs.mongo.js
│ │ ├── payments.mongo.js
│ │ └── users.mongo.js
│ └── factory.js
│
├── docs/
│ ├── budget/
│ ├── client/
│ ├── job/
│ ├── payment/
│ ├── session/
│ └── user/
│
├── middlewares/
│
├── repositories/
│
├── routes/
│ ├── api/
│ └── router.js
│
├── services/
│
├── utils/
│
├── app.js
tests/
.env.example
Para facilitar la comprensión y uso de la API, se ha integrado Swagger en el proyecto. Puedes acceder a la documentación interactiva de la API en la siguiente URL:
http://localhost:8080/api-docs
(Nota: Asegúrate de reemplazar `localhost:8080` con la URL de tu servidor si estás desplegando la aplicación en un entorno diferente.)
Swagger es una herramienta que permite documentar APIs de forma visual, facilitando a los desarrolladores entender cómo interactuar con los diferentes endpoints disponibles. Con la interfaz de Swagger, puedes probar cada endpoint directamente desde el navegador.
- Accede a la URL de Swagger: Abre tu navegador y ve a la URL mencionada anteriormente.
- Explora los endpoints: Puedes ver todos los endpoints disponibles, junto con sus métodos (GET, POST, etc.) y parámetros.
- Probar la API:
- Primero, utiliza el endpoint de `/sessions` para autenticarte. Este endpoint te devolverá un token que necesitarás para autorizar tus solicitudes a otros endpoints.
- Segundo, en la parte superior encontraras un boton AUTHORIZE, ahi deberas colocar el token obtenido y validarlo.
- Tercero, selecciona cualquier endpoint y usa el botón "Try it out" para probarlo con datos de entrada. Swagger mostrará la respuesta de la API en tiempo real.
Asegúrate de que tu servidor esté en funcionamiento para acceder a la documentación.