Skip to content

FernandoAMoyano/Ty-backend

Repository files navigation

License: MIT

💇‍♀️ Turnity Backend

Backend API para sistema de gestión de salones de belleza construido con Node.js, TypeScript, Express y Prisma.

🟣Índice

  1. Inicio Rápido
  2. Scripts disponibles
  3. Arquitectura
  4. Documentación API
  5. API Endpoints
  6. Testing
  7. Base de Datos
  8. Desarrollo local
  9. Tecnologias
  10. Contribuir
  11. Licencia

🟣Inicio Rápido

Índice

Prerrequisitos

  • Docker y Docker Compose
  • Node.js 18+ (opcional, para desarrollo local)

1. Clonar el repositorio

git clone <tu-repo-url>
cd Turnity-backend

2. Configurar variables de entorno

cp .env.example .env

Edita .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"

3. Levantar el proyecto con Docker

# 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:seed

4. Verificar que funciona

La API estará disponible en: http://localhost:3000 Endpoint de salud: GET http://localhost:3000/health

Índice

🟣Scripts Disponibles

Docker (Recomendado)

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 Docker

Base de datos PostgreSQL

npm run docker:db:prisma:migrate    # Ejecutar migraciones
npm run docker:db:prisma:seed       # Ejecutar seed inicial
npm run docker:db:prisma:studio     # Abrir Prisma Studio

Tests

npm run docker:jest:test        # Todos los tests
npm run test                    # Tests locales (requiere DB)

🟣Arquitectura

Índice

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

🟣Documentación API

Índice

Enlaces de Documentación

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

Colecciones de Testing

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

Cómo usar la documentación

  1. Desarrollo: Usa Swagger UI para probar endpoints interactivamente
  2. Testing: Importa las colecciones de Postman para pruebas rápidas
  3. Integración: Usa el JSON de OpenAPI para generar clientes automáticamente

🟣API Endpoints

Índice

Autenticación

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

Categorias

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)

Servicios

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)

Servicios en relación con estilistas

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)

🟣Testing

Índice

  • 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

🟣Base de Datos

Índice

Entidades Implementadas

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

Sistema de Citas (en construcción)

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

Sistema de Pagos (en construcción)

Entidad Descripción
Payment Pagos de citas con múltiples métodos

Sistema de Notificaciones (en construcción)

Entidad Descripción
Notification Notificaciones del sistema
NotificationStatus Estados de notificaciones (Enviada, Leída, etc.)

Comandos útiles:

# Ver base de datos visualmente
npm run docker:db:prisma:studio

# Reset completo de BD
npm run docker:db:prisma:reset

🟣Desarrollo Local

Índice

Si 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

🟣Tecnologías

Índice

  • 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

🟣Contribuir

Índice

  1. Fork el proyecto
  2. Crea una rama: git checkout -b feature/nueva-feature
  3. Commit: git commit -m 'Add nueva feature'
  4. Push: git push origin feature/nueva-feature
  5. Abre un Pull Request

🟣Licencia

Índice

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.

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •