- 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
6.4 KiB
6.4 KiB
Stack Tecnológico - App Canchas de Pádel
🏗️ Arquitectura General
┌─────────────────────────────────────────────────────────────┐
│ CLIENTES │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Web App │ │ Mobile App │ │ Admin Panel │ │
│ │ (React) │ │(React Native)│ │ (React) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
└─────────┼─────────────────┼─────────────────┼──────────────┘
│ │ │
└─────────────────┴─────────────────┘
│
┌───────▼───────┐
│ API Gateway │
│ (Nginx) │
└───────┬───────┘
│
┌─────────────────┼─────────────────┐
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ Backend │ │ Backend │ │ Backend │
│ (Node.js) │ │ (Node.js) │ │ (Node.js) │
│ API REST │ │ API REST │ │ API REST │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└─────────────────┴─────────────────┘
│
┌───────▼───────┐
│ PostgreSQL │
│ (Primary) │
└───────┬───────┘
│
┌─────────────┼─────────────┐
│ │ │
┌──────▼──┐ ┌──────▼──┐ ┌──────▼──┐
│ Redis │ │MinIO/S3 │ │Mailhog/│
│ (Cache) │ │(Files) │ │SendGrid│
└─────────┘ └─────────┘ └────────┘
📦 Stack por Componente
Backend
| Tecnología | Versión | Uso |
|---|---|---|
| Node.js | 20.x LTS | Runtime |
| Express.js | 4.x | Framework HTTP |
| TypeScript | 5.x | Tipado estático |
| Prisma | 5.x | ORM y migraciones |
| Zod | 3.x | Validación de schemas |
| JWT | 9.x | Autenticación |
| bcrypt | 5.x | Hash de passwords |
| cors | 2.x | Cross-origin |
| helmet | 7.x | Seguridad HTTP |
| morgan | 1.x | Logging HTTP |
| winston | 3.x | Logging app |
| nodemailer | 6.x | Envío de emails |
| dotenv | 16.x | Variables de entorno |
Base de Datos
| Tecnología | Uso |
|---|---|
| PostgreSQL 16 | Base de datos principal |
| Redis | Cache y sesiones |
Frontend Web
| Tecnología | Versión | Uso |
|---|---|---|
| React | 18.x | UI Library |
| TypeScript | 5.x | Tipado estático |
| Vite | 5.x | Build tool |
| React Router | 6.x | Routing |
| TanStack Query | 5.x | Data fetching |
| Axios | 1.x | HTTP client |
| TailwindCSS | 3.x | Estilos |
| HeadlessUI | 1.x | Componentes accesibles |
| React Hook Form | 7.x | Formularios |
| Zod | 3.x | Validación |
| date-fns | 3.x | Manejo de fechas |
📁 Estructura de Carpetas
backend/ # API REST Node.js + Express
├── src/
│ ├── config/ # Configuración (DB, email, etc)
│ ├── controllers/ # Controladores HTTP
│ ├── middleware/ # Middlewares (auth, error, etc)
│ ├── routes/ # Definición de rutas
│ ├── services/ # Lógica de negocio
│ ├── utils/ # Utilidades
│ ├── validators/ # Schemas Zod
│ └── index.ts # Entry point
├── prisma/
│ └── schema.prisma # Schema de BD
├── tests/
├── Dockerfile
└── package.json
🔐 Seguridad
- JWT para autenticación stateless
- bcrypt con salt rounds 12 para passwords
- Helmet para headers de seguridad HTTP
- CORS configurado por dominio
- Rate limiting en endpoints sensibles
- Validación de todos los inputs con Zod
- SQL Injection protegido por Prisma ORM
🔌 API Endpoints (Versión 1)
Autenticación
POST /api/v1/auth/register # Registro
POST /api/v1/auth/login # Login
POST /api/v1/auth/logout # Logout
POST /api/v1/auth/refresh # Refresh token
POST /api/v1/auth/forgot-password
POST /api/v1/auth/reset-password
GET /api/v1/auth/me # Perfil actual
Usuarios
GET /api/v1/users # Listar usuarios
GET /api/v1/users/:id # Ver usuario
PUT /api/v1/users/:id # Actualizar usuario
DELETE /api/v1/users/:id # Eliminar usuario (admin)
Canchas
GET /api/v1/courts # Listar canchas
GET /api/v1/courts/:id # Ver cancha
POST /api/v1/courts # Crear cancha (admin)
PUT /api/v1/courts/:id # Actualizar cancha (admin)
DELETE /api/v1/courts/:id # Eliminar cancha (admin)
GET /api/v1/courts/:id/availability # Ver disponibilidad
Reservas
GET /api/v1/bookings # Mis reservas
GET /api/v1/bookings/:id # Ver reserva
POST /api/v1/bookings # Crear reserva
PUT /api/v1/bookings/:id # Modificar reserva
DELETE /api/v1/bookings/:id # Cancelar reserva
Definido el: 2026-01-31 Fase: 1 - Fundamentos