Skip to content

Un proyecto completo de Node.js con TypeScript que implementa operaciones CRUD usando MySQL y TypeORM.

Notifications You must be signed in to change notification settings

jariassv/database-crud-ts

Repository files navigation

Database CRUD - Node.js TypeScript Project

Un proyecto completo de Node.js con TypeScript que implementa operaciones CRUD usando MySQL y TypeORM.

🚀 Características

  • Node.js con TypeScript
  • MySQL como base de datos
  • TypeORM para el mapeo objeto-relacional
  • Jest para pruebas unitarias
  • Docker Compose para el entorno de desarrollo
  • Estructura de carpetas profesional
  • CRUD completo para entidad Task

📁 Estructura del Proyecto

database-crud/
├── src/
│   ├── db/
│   │   ├── config/
│   │   │   └── database.ts          # Configuración de la base de datos
│   │   ├── entities/
│   │   │   └── Task.ts              # Entidad Task con decoradores TypeORM
│   │   └── crud/
│   │       └── taskCrud.ts          # Operaciones CRUD para Task
│   ├── tests/
│   │   └── task.test.ts             # Pruebas unitarias
│   └── main.ts                      # Ejemplo de uso del CRUD
├── docker/
│   └── docker-compose.yml           # Configuración de MySQL y phpMyAdmin
├── scripts/
│   └── init.sql                     # Script de inicialización de la BD
├── package.json                     # Dependencias y scripts
├── tsconfig.json                    # Configuración de TypeScript
└── README.md                        # Este archivo

🛠️ Instalación y Configuración

Prerrequisitos

  • Node.js (v16 o superior)
  • Docker y Docker Compose
  • npm o yarn

1. Clonar e Instalar Dependencias

# Clonar el repositorio
git clone <repository-url>
cd database-crud

# Instalar dependencias
npm install

2. Configurar Variables de Entorno

# Copiar el archivo de ejemplo
cp env.example .env

# Editar las variables según tu configuración
nano .env

Variables de entorno disponibles:

DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=password
DB_DATABASE=ia
NODE_ENV=development
PORT=3000

3. Levantar la Base de Datos

cd docker
docker compose up -d

4. Ejecutar el Proyecto

npm run dev

🚀 Comandos Rápidos

# Desarrollo
npm run dev          # Ejecutar en modo desarrollo
npm run build        # Compilar TypeScript
npm start           # Ejecutar compilado

# Tests
npm test            # Ejecutar tests
npm run test:watch  # Tests en modo watch

# Base de datos
cd docker && docker compose up -d    # Levantar MySQL
cd docker && docker compose down     # Detener MySQL

📊 Modelo de Datos

Entidad Task

interface Task {
  id: number;              // Primary Key, Auto Increment
  title: string;           // Título de la tarea
  description: string;     // Descripción (opcional)
  completed: boolean;      // Estado de completado
  created_at: Date;        // Fecha de creación
  updated_at: Date;        // Fecha de última actualización
}

🔧 Operaciones CRUD

Crear Tarea

const taskCrud = new TaskCrud();

const newTask = await taskCrud.create({
  title: 'Mi Nueva Tarea',
  description: 'Descripción de la tarea',
  completed: false
});

Leer Tareas

// Obtener todas las tareas
const allTasks = await taskCrud.findAll();

// Obtener una tarea por ID
const task = await taskCrud.findOne(1);

// Obtener tareas por estado
const completedTasks = await taskCrud.findByCompletionStatus(true);

Actualizar Tarea

const updatedTask = await taskCrud.update(1, {
  title: 'Título Actualizado',
  completed: true
});

// Marcar como completada
await taskCrud.markAsCompleted(1);

// Marcar como incompleta
await taskCrud.markAsIncomplete(1);

Eliminar Tarea

const deleted = await taskCrud.remove(1);

Estadísticas

const totalCount = await taskCrud.count();
const completedCount = await taskCrud.countCompleted();
const incompleteCount = await taskCrud.countIncomplete();

🧪 Pruebas

El proyecto incluye pruebas unitarias completas que cubren:

  • ✅ Creación de tareas
  • ✅ Lectura de tareas (todas, por ID, por estado)
  • ✅ Actualización de tareas
  • ✅ Eliminación de tareas
  • ✅ Operaciones de marcado (completada/incompleta)
  • ✅ Conteo de tareas
  • ✅ Manejo de errores

Ejecutar Pruebas Específicas

# Ejecutar solo las pruebas de TaskCrud
npm test -- --testNamePattern="TaskCrud"

# Ejecutar pruebas con verbose output
npm test -- --verbose

🐳 Docker

# Comandos básicos
cd docker
docker compose up -d      # Levantar
docker compose down       # Detener
docker compose logs -f    # Ver logs

# Acceso a MySQL
docker exec -it database-crud-mysql mysql -u root -p

📝 Scripts

Script Descripción
npm run dev Desarrollo con ts-node
npm run build Compilar TypeScript
npm start Ejecutar compilado
npm test Ejecutar tests
npm run test:watch Tests en modo watch

🔍 Ejemplo

npm run dev  # Ejecuta demo completo de CRUD

🛠️ Estructura

src/
├── db/
│   ├── entities/     # Entidades TypeORM
│   ├── config/       # Configuración BD
│   └── crud/         # Operaciones CRUD
├── tests/            # Pruebas unitarias
└── main.ts          # Ejemplo de uso

🐛 Problemas Comunes

# MySQL no inicia
cd docker && docker compose down && docker compose up -d

# Puerto ocupado
sudo lsof -i :3306

# Tests fallan
docker exec -i database-crud-mysql mysql -u root -ppassword -e "CREATE DATABASE IF NOT EXISTS ia_test;"

📄 Licencia

MIT License


¡Listo para usar! 🎉

About

Un proyecto completo de Node.js con TypeScript que implementa operaciones CRUD usando MySQL y TypeORM.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published