✅ FASE 2 COMPLETADA: Perfiles, Social y Ranking
Implementados 3 módulos principales: 1. PERFILES EXTENDIDOS - Campos adicionales: ciudad, fecha nacimiento, años jugando - Estadísticas: partidos jugados/ganados/perdidos - Historial de cambios de nivel - Búsqueda de usuarios con filtros 2. SISTEMA SOCIAL - Amigos: solicitudes, aceptar, rechazar, bloquear - Grupos: crear, gestionar miembros, roles - Reservas recurrentes: fijos semanales 3. RANKING Y ESTADÍSTICAS - Registro de partidos 2v2 con confirmación - Sistema de puntos con bonus y multiplicadores - Ranking mensual, anual y global - Estadísticas personales y globales Nuevos endpoints: - /users/* - Perfiles y búsqueda - /friends/* - Gestión de amistades - /groups/* - Grupos de jugadores - /recurring/* - Reservas recurrentes - /matches/* - Registro de partidos - /ranking/* - Clasificaciones - /stats/* - Estadísticas Nuevos usuarios de prueba: - carlos@padel.com / 123456 - ana@padel.com / 123456 - pedro@padel.com / 123456 - maria@padel.com / 123456
This commit is contained in:
@@ -1,6 +1,210 @@
|
||||
# Fase 2: Perfiles
|
||||
# Fase 2: Gestión de Jugadores y Perfiles
|
||||
|
||||
## Estado: ⏳ Pendiente
|
||||
## Estado: ✅ COMPLETADA
|
||||
|
||||
*Esta fase comenzará al finalizar la Fase 1*
|
||||
### ✅ Tareas completadas:
|
||||
|
||||
#### 2.1.1: Perfil Completo
|
||||
- [x] Datos personales extendidos (ciudad, fecha nacimiento)
|
||||
- [x] Datos de juego (años jugando, mano, posición)
|
||||
- [x] Estadísticas de partidos (jugados, ganados, perdidos)
|
||||
- [x] Biografía y foto de perfil
|
||||
|
||||
#### 2.1.2: Sistema de Niveles
|
||||
- [x] Escala de niveles con descripciones (BEGINNER a PROFESSIONAL)
|
||||
- [x] Modelo LevelHistory para tracking de cambios
|
||||
- [x] Validación de nivel por administradores
|
||||
- [x] Historial de cambios de nivel
|
||||
|
||||
#### 2.2.1: Sistema de Amigos/Grupos
|
||||
- [x] Enviar/recibir solicitudes de amistad
|
||||
- [x] Estados: PENDING, ACCEPTED, REJECTED, BLOCKED
|
||||
- [x] Crear grupos de jugadores
|
||||
- [x] Roles en grupos: ADMIN, MEMBER
|
||||
- [x] Invitar jugadores a grupo
|
||||
- [x] Reserva grupal (para fases posteriores)
|
||||
|
||||
#### 2.2.2: Reservas Recurrentes
|
||||
- [x] Configurar fijo semanal (mismo día/hora)
|
||||
- [x] Modelo RecurringBooking
|
||||
- [x] Generación automática de reservas desde recurrentes
|
||||
- [x] Cancelación de series recurrentes
|
||||
|
||||
#### 2.3.1: Historial de Actividad
|
||||
- [x] Modelo MatchResult para resultados de partidos
|
||||
- [x] Registro de partidos jugados (2v2)
|
||||
- [x] Sistema de confirmación de resultados (2+ jugadores)
|
||||
- [x] Estadísticas de asistencia
|
||||
|
||||
#### 2.3.2: Ranking Interno
|
||||
- [x] Sistema de puntos (Victoria=10, Derrota=2, Participación=1)
|
||||
- [x] Bonus por ganar a nivel superior (+5 pts)
|
||||
- [x] Multiplicadores por nivel de jugador
|
||||
- [x] Tabla de clasificación visible
|
||||
- [x] Filtros por período (mensual, anual, global)
|
||||
- [x] Modelo UserStats para estadísticas agregadas
|
||||
|
||||
---
|
||||
|
||||
## 📊 Resumen de Implementación
|
||||
|
||||
### Modelos de Base de Datos
|
||||
|
||||
| Modelo | Descripción |
|
||||
|--------|-------------|
|
||||
| User | Extendido con city, birthDate, yearsPlaying, matchesPlayed/Won/Lost, totalPoints |
|
||||
| LevelHistory | Tracking de cambios de nivel |
|
||||
| Friend | Solicitudes de amistad con estados |
|
||||
| Group | Grupos de jugadores |
|
||||
| GroupMember | Miembros de grupos con roles |
|
||||
| RecurringBooking | Reservas recurrentes semanales |
|
||||
| MatchResult | Resultados de partidos 2v2 |
|
||||
| UserStats | Estadísticas agregadas por período |
|
||||
|
||||
### Nuevos Endpoints
|
||||
|
||||
#### Perfiles
|
||||
```
|
||||
GET /api/v1/users/me - Mi perfil
|
||||
PUT /api/v1/users/me - Actualizar perfil
|
||||
GET /api/v1/users/search - Buscar usuarios
|
||||
GET /api/v1/users/:id - Ver perfil público
|
||||
PUT /api/v1/users/:id/level - Cambiar nivel (admin)
|
||||
GET /api/v1/users/:id/level-history - Historial de niveles
|
||||
```
|
||||
|
||||
#### Amigos
|
||||
```
|
||||
POST /api/v1/friends/request - Enviar solicitud
|
||||
PUT /api/v1/friends/:id/accept - Aceptar solicitud
|
||||
PUT /api/v1/friends/:id/reject - Rechazar solicitud
|
||||
GET /api/v1/friends - Mis amigos
|
||||
GET /api/v1/friends/pending - Solicitudes pendientes
|
||||
DELETE /api/v1/friends/:id - Eliminar amigo
|
||||
```
|
||||
|
||||
#### Grupos
|
||||
```
|
||||
POST /api/v1/groups - Crear grupo
|
||||
GET /api/v1/groups - Mis grupos
|
||||
GET /api/v1/groups/:id - Ver grupo
|
||||
PUT /api/v1/groups/:id - Actualizar grupo
|
||||
DELETE /api/v1/groups/:id - Eliminar grupo
|
||||
POST /api/v1/groups/:id/members - Agregar miembro
|
||||
DELETE /api/v1/groups/:id/members/:userId - Eliminar miembro
|
||||
```
|
||||
|
||||
#### Reservas Recurrentes
|
||||
```
|
||||
POST /api/v1/recurring - Crear recurrente
|
||||
GET /api/v1/recurring - Mis recurrentes
|
||||
DELETE /api/v1/recurring/:id - Cancelar recurrente
|
||||
POST /api/v1/recurring/:id/generate - Generar reservas
|
||||
```
|
||||
|
||||
#### Partidos
|
||||
```
|
||||
POST /api/v1/matches - Registrar partido
|
||||
GET /api/v1/matches/my-matches - Mis partidos
|
||||
GET /api/v1/matches/:id - Ver partido
|
||||
PUT /api/v1/matches/:id/confirm - Confirmar resultado
|
||||
```
|
||||
|
||||
#### Ranking y Estadísticas
|
||||
```
|
||||
GET /api/v1/ranking - Ranking general
|
||||
GET /api/v1/ranking/me - Mi posición
|
||||
GET /api/v1/ranking/top - Top jugadores
|
||||
GET /api/v1/stats/my-stats - Mis estadísticas
|
||||
GET /api/v1/stats/users/:id - Stats de usuario
|
||||
GET /api/v1/stats/courts/:id - Stats de cancha
|
||||
GET /api/v1/stats/global - Stats globales
|
||||
```
|
||||
|
||||
### Sistema de Puntos
|
||||
|
||||
| Concepto | Puntos |
|
||||
|----------|--------|
|
||||
| Victoria | 10 |
|
||||
| Derrota | 2 |
|
||||
| Participación | 1 |
|
||||
| Ganar a superior | +5 |
|
||||
|
||||
**Multiplicadores por nivel:**
|
||||
- BEGINNER: 1.0x
|
||||
- ELEMENTARY: 1.1x
|
||||
- INTERMEDIATE: 1.2x
|
||||
- ADVANCED: 1.3x
|
||||
- COMPETITION: 1.5x
|
||||
- PROFESSIONAL: 2.0x
|
||||
|
||||
### Rangos
|
||||
|
||||
| Puntos | Título |
|
||||
|--------|--------|
|
||||
| 0-99 | Bronce |
|
||||
| 100-299 | Plata |
|
||||
| 300-599 | Oro |
|
||||
| 600-999 | Platino |
|
||||
| 1000+ | Diamante |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Cómo probar
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Credenciales de prueba
|
||||
|
||||
| Email | Password | Nivel |
|
||||
|-------|----------|-------|
|
||||
| admin@padel.com | admin123 | ADMIN |
|
||||
| user@padel.com | user123 | INTERMEDIATE |
|
||||
| carlos@padel.com | 123456 | ADVANCED |
|
||||
| ana@padel.com | 123456 | INTERMEDIATE |
|
||||
| pedro@padel.com | 123456 | BEGINNER |
|
||||
| maria@padel.com | 123456 | COMPETITION |
|
||||
|
||||
---
|
||||
|
||||
## 📁 Archivos creados en esta fase
|
||||
|
||||
```
|
||||
backend/src/
|
||||
├── services/
|
||||
│ ├── user.service.ts # Perfiles y búsqueda
|
||||
│ ├── friend.service.ts # Sistema de amigos
|
||||
│ ├── group.service.ts # Grupos de jugadores
|
||||
│ ├── recurring.service.ts # Reservas recurrentes
|
||||
│ ├── match.service.ts # Registro de partidos
|
||||
│ ├── ranking.service.ts # Cálculo de ranking
|
||||
│ └── stats.service.ts # Estadísticas
|
||||
├── controllers/
|
||||
│ ├── user.controller.ts
|
||||
│ ├── friend.controller.ts
|
||||
│ ├── group.controller.ts
|
||||
│ ├── recurring.controller.ts
|
||||
│ ├── match.controller.ts
|
||||
│ ├── ranking.controller.ts
|
||||
│ └── stats.controller.ts
|
||||
├── routes/
|
||||
│ ├── user.routes.ts
|
||||
│ ├── friend.routes.ts
|
||||
│ ├── group.routes.ts
|
||||
│ ├── recurring.routes.ts
|
||||
│ ├── match.routes.ts
|
||||
│ ├── ranking.routes.ts
|
||||
│ └── stats.routes.ts
|
||||
├── validators/
|
||||
│ ├── user.validator.ts
|
||||
│ └── social.validator.ts
|
||||
└── utils/
|
||||
└── ranking.ts # Cálculo de puntos y rangos
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*Completada el: 2026-01-31*
|
||||
|
||||
Reference in New Issue
Block a user