- API REST completa con Node.js + Express + TypeScript - Autenticación JWT con roles (Player/Admin) - CRUD completo de canchas - Sistema de reservas con validaciones - Base de datos SQLite con Prisma ORM - Notificaciones por email (Nodemailer) - Seed de datos de prueba - Documentación de arquitectura Endpoints implementados: - Auth: register, login, refresh, me - Courts: CRUD + disponibilidad - Bookings: CRUD + confirmación/cancelación Credenciales de prueba: - admin@padel.com / admin123 - user@padel.com / user123
183 lines
4.8 KiB
Markdown
183 lines
4.8 KiB
Markdown
# Fase 1: Fundamentos y Core
|
|
|
|
## Estado: ✅ COMPLETADA
|
|
|
|
### ✅ Tareas completadas:
|
|
|
|
#### 1.1.1 Definición de Arquitectura
|
|
- [x] Stack tecnológico definido (Node.js + Express + TypeScript + Prisma + SQLite)
|
|
- [x] Diagrama de arquitectura creado
|
|
- [x] Estructura de base de datos diseñada
|
|
- [x] Documento de requisitos técnicos
|
|
|
|
#### 1.1.2 Setup de Infraestructura
|
|
- [x] Repositorios Git configurados
|
|
- [x] Entorno de desarrollo configurado
|
|
- [x] Dependencias instaladas
|
|
- [x] Configuración TypeScript
|
|
- [x] ESLint configurado
|
|
|
|
#### 1.2.1 Sistema de Autenticación
|
|
- [x] Registro de usuarios con validación
|
|
- [x] Login con JWT
|
|
- [x] Refresh token
|
|
- [x] Logout
|
|
- [x] Middleware de autenticación
|
|
- [x] Hash de contraseñas con bcrypt
|
|
|
|
#### 1.2.2 Gestión de Roles
|
|
- [x] Rol Jugador
|
|
- [x] Rol Administrador
|
|
- [x] Middleware de permisos (authorize)
|
|
- [x] Protección de rutas por rol
|
|
|
|
#### 1.3.1 Gestión de Canchas
|
|
- [x] CRUD completo de canchas
|
|
- [x] Configuración de horarios
|
|
- [x] Estados de cancha (activa/inactiva)
|
|
- [x] Tipos de cancha (Panorámica, Exterior, Cubierta)
|
|
- [x] Consulta de disponibilidad por fecha
|
|
|
|
#### 1.3.2 Sistema de Reservas Core
|
|
- [x] Crear reserva con validaciones
|
|
- [x] Validación de disponibilidad en tiempo real
|
|
- [x] Verificación de horarios de cancha
|
|
- [x] Prevención de reservas duplicadas
|
|
- [x] Cancelación de reservas
|
|
- [x] Confirmación de reservas (admin)
|
|
- [x] Listado de reservas por usuario
|
|
- [x] Listado de todas las reservas (admin)
|
|
|
|
#### 1.3.3 Notificaciones Básicas
|
|
- [x] Servicio de email configurado (Nodemailer)
|
|
- [x] Email de bienvenida al registrar
|
|
- [x] Email de confirmación de reserva
|
|
- [x] Email de cancelación de reserva
|
|
- [x] Template básico de emails
|
|
|
|
---
|
|
|
|
## 📊 Resumen de Implementación
|
|
|
|
### Backend API
|
|
- **URL Base**: `http://localhost:3000/api/v1`
|
|
- **Tecnologías**: Node.js 20, Express, TypeScript, Prisma, SQLite
|
|
- **Autenticación**: JWT con refresh tokens
|
|
- **Validación**: Zod schemas
|
|
|
|
### Endpoints implementados:
|
|
|
|
| Método | Ruta | Descripción |
|
|
|--------|------|-------------|
|
|
| POST | /auth/register | Registro de usuarios |
|
|
| POST | /auth/login | Login |
|
|
| GET | /auth/me | Perfil del usuario |
|
|
| POST | /auth/refresh | Refresh token |
|
|
| GET | /courts | Listar canchas |
|
|
| GET | /courts/:id | Ver cancha |
|
|
| POST | /courts | Crear cancha (admin) |
|
|
| PUT | /courts/:id | Actualizar cancha (admin) |
|
|
| DELETE | /courts/:id | Eliminar cancha (admin) |
|
|
| GET | /courts/:id/availability | Disponibilidad |
|
|
| POST | /bookings | Crear reserva |
|
|
| GET | /bookings | Listar reservas (admin) |
|
|
| GET | /bookings/my-bookings | Mis reservas |
|
|
| GET | /bookings/:id | Ver reserva |
|
|
| PUT | /bookings/:id | Actualizar reserva |
|
|
| DELETE | /bookings/:id | Cancelar reserva |
|
|
| PUT | /bookings/:id/confirm | Confirmar reserva (admin) |
|
|
|
|
### Base de Datos
|
|
- **Provider**: SQLite (desarrollo) / PostgreSQL (producción)
|
|
- **ORM**: Prisma
|
|
- **Entidades**: User, Court, CourtSchedule, Booking
|
|
|
|
### Credenciales de prueba:
|
|
```
|
|
Admin: admin@padel.com / admin123
|
|
User: user@padel.com / user123
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 Cómo ejecutar
|
|
|
|
```bash
|
|
# Instalar dependencias
|
|
cd backend
|
|
npm install
|
|
|
|
# Configurar variables de entorno
|
|
cp .env.example .env
|
|
|
|
# Generar cliente Prisma
|
|
npx prisma generate
|
|
|
|
# Ejecutar migraciones
|
|
npx prisma migrate dev
|
|
|
|
# Seed de datos
|
|
npx tsx prisma/seed.ts
|
|
|
|
# Iniciar servidor
|
|
npm run dev
|
|
```
|
|
|
|
---
|
|
|
|
## 📁 Archivos creados en esta fase
|
|
|
|
```
|
|
backend/
|
|
├── src/
|
|
│ ├── config/
|
|
│ │ ├── index.ts
|
|
│ │ ├── database.ts
|
|
│ │ └── logger.ts
|
|
│ ├── controllers/
|
|
│ │ ├── auth.controller.ts
|
|
│ │ ├── court.controller.ts
|
|
│ │ └── booking.controller.ts
|
|
│ ├── middleware/
|
|
│ │ ├── auth.ts
|
|
│ │ ├── errorHandler.ts
|
|
│ │ └── validate.ts
|
|
│ ├── routes/
|
|
│ │ ├── auth.routes.ts
|
|
│ │ ├── court.routes.ts
|
|
│ │ ├── booking.routes.ts
|
|
│ │ └── index.ts
|
|
│ ├── services/
|
|
│ │ ├── auth.service.ts
|
|
│ │ ├── court.service.ts
|
|
│ │ ├── booking.service.ts
|
|
│ │ └── email.service.ts
|
|
│ ├── utils/
|
|
│ │ ├── jwt.ts
|
|
│ │ ├── password.ts
|
|
│ │ └── constants.ts
|
|
│ ├── validators/
|
|
│ │ └── auth.validator.ts
|
|
│ └── index.ts
|
|
├── prisma/
|
|
│ ├── schema.prisma
|
|
│ └── seed.ts
|
|
├── package.json
|
|
├── tsconfig.json
|
|
└── .env
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 Notas
|
|
|
|
- La Fase 1 está completa y lista para usar
|
|
- El backend está funcional con todas las operaciones CRUD
|
|
- Se incluyen datos de prueba (seed)
|
|
- Los emails funcionan en modo simulado en desarrollo
|
|
- Para producción, configurar SMTP en variables de entorno
|
|
|
|
---
|
|
|
|
*Completada el: 2026-01-31*
|