Files
app-padel/docs/arquitectura/STACK.md
Ivan Alcaraz b558372810 FASE 1 COMPLETADA: Fundamentos y Core del Backend
- 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
2026-01-31 08:11:53 +00:00

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