Este proyecto es un servicio REST desarrollado con Node.js, TypeScript, Express y Sequelize para la gestión de clientes. Proporciona endpoints para crear, listar y obtener estadísticas de clientes.
- Node.js 18.x o superior
- MySQL 8.0 o superior
- npm o yarn
- Postman u otra herramienta para pruebas de API REST
- Asegúrate de tener MySQL instalado y en ejecución en tu sistema
- Crea la base de datos ejecutando:
CREATE DATABASE IF NOT EXISTS `periferia-customers`;
USE `periferia-customers`;
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
full_name VARCHAR(255) NOT NULL,
identity_document VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
date_of_birth DATE NOT NULL,
time_zone VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
- Clona el repositorio
- Instala las dependencias:
npm install
# o si usas yarn
yarn install
- Crea un archivo
.env
en la raíz del proyecto:
DB_HOST=localhost
DB_USER=root
DB_PASS=
DB_NAME=periferia-customers
PORT=3001
El proyecto utiliza las siguientes dependencias principales definidas en package.json
:
{
"dependencies": {
"cors": "^2.8.5",
"debug": "^4.3.6",
"dotenv": "^8.2.0",
"express": "^4.18.2",
"http-status": "^1.6.2",
"mysql2": "^3.4.3",
"sequelize": "^6.32.1"
},
"devDependencies": {
"@types/cors": "^2.8.17",
"@types/express": "^4.17.17",
"nodemon": "^3.1.4",
"ts-node": "^10.9.1",
"typescript": "^5.1.6"
}
}
- Para desarrollo:
# Usando npm
npm run dev
# Usando yarn
yarn dev
La aplicación estará disponible en http://localhost:3001
- URL:
/api/customers/new
- Método: POST
- Body:
{
"fullName": "John Doe",
"identityDocument": "1234567890",
"email": "[email protected]",
"dateOfBirth": "1990-01-01",
"timeZone": "America/New_York"
}
- Respuesta exitosa: Status 201 (CREATED)
- URL:
/api/customers/all
- Método: GET
- Respuesta: Lista de clientes ordenada por nombre
- URL:
/api/customers/allByAge
- Método: GET
- Respuesta: Lista de clientes ordenada por edad
- URL:
/api/customers/ageAverageCustomers
- Método: GET
- Respuesta:
{
"customerCount": 10,
"averageAge": 35.5
}
-
Importa la siguiente colección de Postman:
-
Prueba los endpoints en el siguiente orden:
- Crear un nuevo cliente (POST)
- Verificar la lista de clientes (GET /all)
- Obtener la lista ordenada por edad (GET /allByAge)
- Consultar el promedio de edad (GET /ageAverageCustomers)
curl -X POST http://localhost:3001/api/customers/new \
-H "Content-Type: application/json" \
-d '{
"fullName": "John Doe",
"identityDocument": "1234567890",
"email": "[email protected]",
"dateOfBirth": "1990-01-01",
"timeZone": "America/New_York"
}'
curl http://localhost:3001/api/customers/all
curl http://localhost:3001/api/customers/allByAge
curl http://localhost:3001/api/customers/ageAverageCustomers
-
Error de conexión a la base de datos
- Verifica que MySQL esté en ejecución
- Confirma las credenciales en el archivo .env
- Asegúrate de que el puerto de MySQL esté disponible
-
Error al crear cliente
- Verifica que el email sea único
- Asegúrate de que el documento de identidad sea único
- Confirma el formato correcto de la fecha (YYYY-MM-DD)
{
"scripts": {
"dev": "set DEBUG=periferia:* & nodemon ./src/index.ts"
}
}
- Fork el repositorio
- Crea una rama para tu característica (
git checkout -b feature/AmazingFeature
) - Commit tus cambios (
git commit -m 'Add some AmazingFeature'
) - Push a la rama (
git push origin feature/AmazingFeature
) - Abre un Pull Request
Este proyecto está bajo la licencia MIT. Ver el archivo LICENSE
para más detalles.