Backend API para sistema de gestión de salones de belleza construido con Node.js, TypeScript, Express y Prisma.
- Inicio Rápido
- Scripts disponibles
- Arquitectura
- Documentación API
- API Endpoints
- Testing
- Base de Datos
- Desarrollo local
- Tecnologias
- Contribuir
- Licencia
- Docker y Docker Compose
- Node.js 18+ (opcional, para desarrollo local)
git clone <tu-repo-url>
cd Turnity-backendcp .env.example .envEdita .env con tus valores:
DATABASE_URL="postgresql://username:password@localhost:5432/turnity"
JWT_SECRET="tu-jwt-secret-super-seguro"
JWT_REFRESH_SECRET="tu-refresh-secret-super-seguro"# Construir e iniciar todos los servicios
npm run docker:up
# Ejecutar migraciones y seed
npm run docker:db:prisma:migrate
npm run docker:db:prisma:seedLa API estará disponible en: http://localhost:3000 Endpoint de salud: GET http://localhost:3000/health
npm run docker:up # Levantar todos los servicios
npm run docker:down # Detener todos los servicios
npm run docker:dev:build # Construir imagen de desarrollo
npm run docker:jest:test # Ejecutar tests en Dockernpm run docker:db:prisma:migrate # Ejecutar migraciones
npm run docker:db:prisma:seed # Ejecutar seed inicial
npm run docker:db:prisma:studio # Abrir Prisma Studionpm run docker:jest:test # Todos los tests
npm run test # Tests locales (requiere DB)El proyecto sigue Clean Architecture con estas capas:
src/modules/[module]/
├── presentation/ # Controllers, Routes, middlewares, validations
├── application/ # Use Cases, Services, DTOs
├── domain/ # Entities, Repository Interfaces
├── infrastructure/ # DB, External Services, persistence
└── container.ts # Dependency Injection
| Recurso | URL | Descripción |
|---|---|---|
| Swagger UI | http://localhost:3000/api/docs | Documentación interactiva completa |
| API Info | http://localhost:3000/api/info | Información básica de la API |
| OpenAPI JSON | http://localhost:3000/api/docs.json | Especificación OpenAPI en formato JSON |
| Health Check | http://localhost:3000/health | Estado de salud del servicio |
| Herramienta | Archivo | Descripción |
|---|---|---|
| Postman | docs/auth_postman_collection.json |
Colección de endpoints de autenticación |
| Postman | docs/services_postman_collection.json |
Colección de endpoints de servicios |
- Desarrollo: Usa Swagger UI para probar endpoints interactivamente
- Testing: Importa las colecciones de Postman para pruebas rápidas
- Integración: Usa el JSON de OpenAPI para generar clientes automáticamente
POST /api/v1/auth/register # Registrar usuario
POST /api/v1/auth/login # Iniciar sesión
POST /api/v1/auth/refresh-token # Renovar token
GET /api/v1/auth/profile # Obtener perfil
PUT /api/v1/auth/profile # Actualizar perfil
PUT /api/v1/auth/change-password # Cambiar contraseña
GET /api/v1/categories # Obtener todas las categorías
GET /api/v1/categories/active # Obtener categorías activas
GET /api/v1/categories/:id # Obtener categoría por ID
POST /api/v1/categories # Crear categoría (ADMIN)
PUT /api/v1/categories/:id # Actualizar categoría (ADMIN)
PATCH /api/v1/categories/:id/activate # Activar categoría (ADMIN)
PATCH /api/v1/categories/:id/deactivate # Desactivar categoría (ADMIN)
DELETE /api/v1/categories/:id # Eliminar categoría (ADMIN)
GET /api/v1/services # Obtener todos los servicios
GET /api/v1/services/active # Obtener servicios activos
GET /api/v1/services/:id # Obtener servicio por ID
GET /api/v1/services/category/:categoryId # Obtener servicios por categoría
GET /api/v1/services/category/:categoryId/active # Obtener servicios activos por categoría
POST /api/v1/services # Crear servicio (ADMIN)
PUT /api/v1/services/:id # Actualizar servicio (ADMIN)
PATCH /api/v1/services/:id/activate # Activar servicio (ADMIN)
PATCH /api/v1/services/:id/deactivate # Desactivar servicio (ADMIN)
DELETE /api/v1/services/:id # Eliminar servicio (ADMIN)
GET /api/v1/stylists/:stylistId/services # Obtener servicios del estilista
GET /api/v1/stylists/:stylistId/services/active # Obtener servicios activos del estilista
GET /api/v1/stylists/:stylistId/services/detailed # Vista detallada del estilista con servicios
GET /api/v1/services/:serviceId/stylists # Obtener estilistas del servicio
GET /api/v1/services/:serviceId/stylists/offering # Obtener estilistas que ofrecen el servicio
GET /api/v1/services/:serviceId/stylists/detailed # Vista detallada del servicio con estilistas
POST /api/v1/stylists/:stylistId/services # Asignar servicio a estilista (ADMIN/STYLIST)
PUT /api/v1/stylists/:stylistId/services/:serviceId # Actualizar servicio del estilista (ADMIN/STYLIST)
DELETE /api/v1/stylists/:stylistId/services/:serviceId # Remover servicio del estilista (ADMIN/STYLIST)
- Tests unitarios - Entities, Services
- Tests de integración - API endpoints
- Tests E2E - Flujos completos
El proyecto utiliza una base de datos principal (turnity) para desarrollo y testing, con limpieza automática de datos de prueba:
| Base de Datos | Uso | Descripción |
|---|---|---|
turnity |
Desarrollo y Testing | Base de datos única con datos de desarrollo y limpieza automática para tests |
# 1. Ejecutar todos los tests
npm run docker:jest:test
# 2. Tests específicos
npm run docker:jest:test -- tests/integration/auth/login.integration.test.ts
# 3. Tests con patrón
npm run docker:jest:test -- --testNamePattern="should login successfully"
# 4. Ver cobertura de tests
npm run docker:jest:test -- --coverage| Entidad | Descripción |
|---|---|
| User | Usuarios del sistema con roles diferenciados |
| Role | Roles del sistema (ADMIN, CLIENT, STYLIST) |
| Category | Categorías de servicios (ej: Corte, Coloración) |
| Service | Servicios ofrecidos con precios y duración |
| StylistService | Relación estilista-servicio con precios personalizados |
| Client | Perfil extendido para clientes |
| Stylist | Perfil extendido para estilistas |
| Entidad | Descripción |
|---|---|
| Appointment | Citas entre clientes y estilistas |
| AppointmentStatus | Estados de citas (Pendiente, Confirmada, Completada) |
| Schedule | Horarios de disponibilidad por día de semana |
| Holiday | Días festivos y fechas especiales |
| ScheduleException | Excepciones de horario para fechas específicas |
| Entidad | Descripción |
|---|---|
| Payment | Pagos de citas con múltiples métodos |
| Entidad | Descripción |
|---|---|
| Notification | Notificaciones del sistema |
| NotificationStatus | Estados de notificaciones (Enviada, Leída, etc.) |
# Ver base de datos visualmente
npm run docker:db:prisma:studio
# Reset completo de BD
npm run docker:db:prisma:resetSi prefieres desarrollo sin Docker:
# Instalar dependencias
npm install
# Configurar base de datos local
# (Asegúrate de tener PostgreSQL corriendo)
# Ejecutar migraciones
npx prisma migrate deploy
npx prisma db seed
# Modo desarrollo
npm run dev- Runtime: Node.js + TypeScript
- Framework: Express.js
- Base de datos: PostgreSQL + Prisma ORM
- Autenticación: JWT
- Testing: Jest + Supertest
- Containerización: Docker + Docker Compose
- Arquitectura: Clean Architecture + DDD
- Fork el proyecto
- Crea una rama:
git checkout -b feature/nueva-feature - Commit:
git commit -m 'Add nueva feature' - Push:
git push origin feature/nueva-feature - Abre un Pull Request
Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles. Protección Intelectual
- Código fuente protegido bajo Licencia MIT
- Derechos de autor reservados a Fernando Moyano (2025)
- Uso comercial permitido con atribución apropiada
- Modificaciones permitidas manteniendo créditos originales
Uso Empresarial Si planeas usar este proyecto comercialmente:
- Mantén el aviso de copyright en archivos derivados
- Incluye referencia al autor original -Respeta los términos de la Licencia MIT
Contribuciones Al contribuir a este proyecto, aceptas que tus contribuciones se licencien bajo los mismos términos.
© 2025 Fernando Moyano. Todos los derechos reservados.