CARRICOCHE
En este proyecto se realizará un servidor web en el que se aloje una página de renting y venta de coches.
ESQUEMA DEL PROYECTO
/Carricoche
│
├── /carricoche Directorio donde se almacena BBDD y docker
│ ├── /scripts Directorio donde se almacena el SQL
│ ├── .env Variables de entorno
│ └── /docker Archivos de configuración de Docker
│
├── /controllers/ Lógica de los controladores (manejo de las rutas)
│ ├── comprasController.js
│ ├── clientesController.js
│ ├── sessionController.js
│ └── ventasController.js
│
├── /models/ Modelos para interactuar con la base de datos
│ └── userModel.js Modelo de usuario (si existe)
│
├── /routers/ Definición de las rutas y su asignación a controladores
│ ├── clientesRouter.js
│ ├── movimientosRouter.js
│ └── sessionRouter.js
│
├── /views/ Vistas para renderizar (plantillas Pug)
│ ├── clientes/
│ │ ├── list.pug
│ │ ├── add.pug
│ │ ├── edit.pug
│ │ └── compras/
│ │ ├── compras_cliente.pug
│ │ ├── add.pug
│ │ └── edit.pug
│ ├── compras/
│ │ ├── list.pug
│ │ ├── add.pug
│ │ └── edit.pug
│ ├── ventas/
│ │ ├── list.pug
│ │ ├── add.pug
│ │ └── edit.pug
│ ├── login/
│ │ ├── login.pug
│ │ ├── register.pug
│ │ ├── forgot.pug
│ │ └── reset.pug
│ ├── error.pug
│ ├── index.pug Vista principal
│ └── movimientos.pug
│
├── app.js Archivo principal que arranca el servidor Express
├── db.js Archivo principal que establece una conexión con la base de datos
├── .gitignore Archivos y carpetas que Git debe ignorar
├── package.json Dependencias, scripts y metadatos del proyecto
└── README.md Descripción del proyecto
INSTALACIÓN
1. Dependencias
Lo primero será instalar las dependecias, para ello las instalaremos con npm:
npm install body-parser
npm install dotenv
npm install express
npm install express-session
npm install mysql2
npm install pug
npm install bcrypt
npm install nodemailer
npm install crypto
npm install jsonwebtoken
o instalarlas directamente desde el package.json
npm install
Explicación de cada dependencia:
-
Express: Framework de Node.js que permite crear aplicaciones web de manera rápida y sencilla. Maneja solicitudes HTTP, enruta URLs y renderiza plantillas de HTML.
-
Express-Session: Middleware que gestiona sesiones en aplicaciones web construidas con Express, permitiendo almacenar y recuperar información de sesión para cada usuario.
-
MySQL2: Driver de base de datos que permite interactuar con bases de datos MySQL desde una aplicación Node.js, facilitando consultas, inserciones, actualizaciones y eliminaciones de datos.
-
Pug: Motor de plantillas que permite renderizar HTML dinámico en aplicaciones web, separando la lógica de negocio de la presentación de la interfaz de usuario.
-
Body-Parser: Middleware que parsea los datos de formulario enviados en solicitudes HTTP y los convierte en objetos JSON que pueden ser manejados por la aplicación.
-
Dotenv: Librería que carga variables de entorno desde un archivo .env en aplicaciones Node.js, separando la configuración de la aplicación de su código fuente.
-
Bcrypt: Librería que cifra contraseñas de manera segura, permitiendo almacenar contraseñas cifradas en la base de datos y verificarlas al autenticar usuarios.
-
Nodemailer: Librería que permite enviar correos electrónicos desde una aplicación Node.js, útil para enviar correos de activación, restablecimiento de contraseña y notificaciones.
-
Crypto: Librería que proporciona funciones criptográficas para generar tokens y hashes seguros, utilizada para crear tokens de activación y restablecimiento de contraseña.
-
Jsonwebtoken: Librería que permite generar y verificar tokens JSON Web Tokens (JWT) para autenticar y autorizar usuarios en aplicaciones web.
2. Creación del docker
Lo que hay que hacer es crear un contenedor en el directorio carricoche utilizando un docker-compose. Para ello se creará un archivo que contenga un servicio de adminer y otro de mysql, añadiendo la siguientes líneas , dentro del servicio mysql, para que al iniciarse reconozca automáticamente el archivo .sql.
volumes:
- ./scripts:/docker-entrypoint-initdb.d
Se puede acceder a un ejemplo de docker-compose en este enlace : https://hub.docker.com/_/adminer
2. Creación del fichero .env
El fichero .env se deberá crear forzosamente en el directorio carricoche,no el raíz, manteniedo el siguiente formato:
MYSQL_ROOT_PASSWORD = contraseña deseada
MYSQL_USERNAME = root
MYSQL_PORT = puerto deseado
DATABASE = carricoche
MYSQL_HOST = localhost
ADMINER_PORT = puerto deseado
SERVICE_PORT = puerto deseado
La creación de este fichero es vital para el funcionamiento tanto del contenedor docker como de la aplicación en sí.
INICIAR APLICACIÓN
node app.js
npm start #comando definido en el package.json
END POINTS
Compras
Método | Ruta | Endpoint |
---|---|---|
GET | /movimientos/compras | Obtener todas las compras |
GET | /movimientos/compras/add | Formulario para agregar una compra |
POST | /movimientos/compras/add | Agregar una compra |
GET | /movimientos/compras/del/:id | Eliminar una compra por ID |
GET | /movimientos/compras/edit/:id | Formulario para editar una compra por ID |
POST | /movimientos/compras/edit/:id | Editar una compra por ID |
Ventas
Método | Ruta | Endpoint |
---|---|---|
GET | /movimientos/ventas | Obtener todas las ventas |
GET | /movimientos/ventas/add | Formulario para agregar una venta |
POST | /movimientos/ventas/add | Agregar una venta |
GET | /movimientos/ventas/del/:id | Eliminar una venta por ID |
GET | /movimientos/ventas/edit/:id | Formulario para editar una venta por ID |
POST | /movimientos/ventas/edit/:id | Editar una venta por ID |
Clientes
Método | Ruta | Endpoint |
---|---|---|
GET | /clientes | Obtener todos los clientes |
GET | /clientes/:id/compras | Obtener las compras de un cliente por ID |
GET | /clientes/:id/ventas | Obtener las ventas de un cliente por ID |
GET | /clientes/:id/compras/del/:id_compra | Eliminar una compra de un cliente por ID |
GET | /clientes/:id/compras/edit/:id_compra | Formulario para editar una compra de un cliente por ID |
POST | /clientes/:id/compras/edit/:id_compra | Editar una compra de un cliente por ID |
GET | /clientes/:id/compras/add | Formulario para agregar una compra a un cliente por ID |
POST | /clientes/:id/compras/add | Agregar una compra a un cliente por ID |
GET | /clientes/:id/ventas/del/:id_venta | Eliminar una venta de un cliente por ID |
GET | /clientes/:id/ventas/edit/:id_venta | Formulario para editar una venta de un cliente por ID |
POST | /clientes/:id/ventas/edit/:id_venta | Editar una venta de un cliente por ID |
GET | /clientes/:id/ventas/add | Formulario para agregar una venta a un cliente por ID |
POST | /clientes/:id/ventas/add | Agregar una venta a un cliente por ID |
DOCUMENTACIÓN DEL CÓDIGO
Escrita mediante comentarios en los distintos ficheros del proyecto