Aplicación CRUD de tareas (ToDo List) con backend en Node.js, Express, TypeORM, PostgreSQL y comunicación en tiempo real usando Socket.IO.
Puede probar la aplicación en línea en las siguientes URL:
- Cliente: Proyecto archivado no disponible en línea
- Servidor: Proyecto archivado no disponible en línea
Nota: En el servidor se dispone de una App SPA para probar el servidor. El código de la aplicación SPA puede revisarse en este repositorio: Repositorio To-Do App Frontend
- El backend está escrito en TypeScript para mejorar el tipado y la seguridad del código.
- La estructura de carpetas sigue el principio de Screaming Architecture, separando el código por módulos de dominio.
- Se implementan servicios para acceder a los repositorios, inspirados en la arquitectura de Nest.js, lo que facilita la escalabilidad y el testing.
- Se utiliza TypeORM para simplificar el manejo de consultas y la gestión de la base de datos relacional.
- La comunicación en tiempo real se implementa con Socket.IO, permitiendo notificaciones instantáneas de cambios en las tareas.
- La base de datos PostgreSQL se levanta y persiste usando Docker y
docker-compose, desacoplada del código fuente y permitiendo portabilidad y flexibilidad del proyecto. - El servidor sirve una SPA (Single Page Application) para pruebas rápidas y cuenta con una demo online.
- GET
/tasks— Listar todas las tareas - GET
/tasks/:id— Obtener una tarea por ID - POST
/tasks— Crear una nueva tarea - PUT
/tasks/:id— Actualizar una tarea existente - DELETE
/tasks/:id— Eliminar una tarea
{
"titulo": "Mi tarea",
"descripcion": "Descripción opcional"
}{
"status": "completada" // o "pendiente"
}- Puede conectarse a
http://localhost:3000usando el cliente de Socket.IO. - Eventos emitidos por el servidor:
task_created— Cuando se crea una tareatask_updated— Cuando se actualiza una tareatask_deleted— Cuando se elimina una tarea
- Node.js 20 o superior
- Docker y Docker Compose
- Git
git clone https://github.com/felipejoq/tasks-app-socket.git
cd tasks-app-socketCopie y renombre el archivo .env.template a .env y configure sus variables de entorno, por ejemplo:
# Global envs
PORT=3000
PUBLIC_PATH=public
# Database configuration
TYPE_DB=postgres
PGHOST=localhost
PGPORT=5433
PGUSER=postgres
PGPASSWORD= # Contraseña del usuario postgres es requerida
PGDATABASE=tasksapp
SYNCHRONIZE_DB=true # Poner en false si no hay que sincronizar la base de datos
LOGGING_DB=false
# POSTGRES_URL=
Nota: Puede cambiar los valores según sus preferencias. Asegúrese de que coincidan con los usados en
docker-compose.yml.
docker-compose up -dEsto iniciará un contenedor de PostgreSQL y creará la carpeta postgres/ para persistencia de datos.
npm installnpm run devLa API estará disponible en http://localhost:3000.
- Si necesita cambiar usuario, contraseña, base de datos o puerto, edite el archivo
.envy reinicie los servicios:
docker-compose down
# Edite .env
# Luego:
docker-compose up -d
npm run dev- Los datos de la base de datos se guardan en la carpeta
postgres/y están ignorados por git y TypeScript. - Puede probar los endpoints con Postman o cualquier cliente HTTP.
- Para probar el servidor y socket se ha añadido una App SPA en la raíz del servidor (en local sería http://localhost:3000/) y en remoto puede usar https://todo-server.uncodigo.com
Felipe Jofré Quevedo.