# πŸ€ OnAPB β€” Sistema de GestiΓ³n de AsociaciΓ³n de BΓ‘squet **OnAPB** es una plataforma web integral para la gestiΓ³n digital de asociaciones de bΓ‘squet. Digitaliza la administraciΓ³n de clubes, equipos, jugadores, torneos y el acceso a eventos mediante cΓ³digos QR, reemplazando procesos que antes eran 100% manuales o en papel. > **Sitio en ProducciΓ³n:** [onapb.com](https://onapb.com) --- ## πŸ› οΈ Stack TecnolΓ³gico | Capa | TecnologΓ­a | |---|---| | **Backend Framework** | Laravel 12.x (PHP 8.2+) | | **ORM** | Eloquent ORM | | **Base de Datos** | MySQL / MariaDB | | **Frontend** | Bootstrap 5 + CSS Vainilla personalizado | | **Build Tool** | Vite + NPM | | **GestiΓ³n de Paquetes** | Composer | | **Anti-Bot** | Cloudflare Turnstile | | **Correo** | Laravel Mailer (SMTP) | | **QR Generation** | `simplesoftwareio/simple-qrcode` | | **Backups** | `spatie/laravel-backup` | | **Testing** | PHPUnit 11 (Feature Tests) | --- ## πŸ›οΈ Arquitectura del Sistema El sistema sigue el patrΓ³n **MVC (Modelo-Vista-Controlador)** provisto por Laravel, con las siguientes capas: ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ CLIENTE β”‚ β”‚ Browser (Bootstrap 5 + JavaScript) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ HTTP / HTTPS β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ RUTAS (web.php) β”‚ β”‚ Rutas pΓΊblicas / Panel usuario / Panel admin β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ CONTROLADORES β”‚ β”‚ AdminController Β· PanelController Β· AuthController β”‚ β”‚ TorneoController Β· FixtureController Β· PaseController Β· ... β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MODELOS β”‚ β”‚ SERVICIOS β”‚ β”‚ Club / Equipo β”‚ β”‚ NotificacionService β”‚ β”‚ Jugador / Evento β”‚ β”‚ FixtureService β”‚ β”‚ QrCode / Torneo │◄────────────────│ TournamentService β”‚ β”‚ Promocion / ... β”‚ Eloquent ORM β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ BASE DE DATOS β”‚ β”‚ MySQL / MariaDB β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### Capas Adicionales - **Observers** β€” LΓ³gica de negocio automatizada ante eventos de modelos. - **Console Commands** β€” Tareas programadas: `CleanupOldEvents`, `RecordatorioPartidos`, `ReporteSemanal`. - **Mails** β€” Notificaciones por correo: bienvenida, QRs generados, reset de contraseΓ±a. --- ## πŸ—„οΈ Esquema de Base de Datos (Entidades Principales) ``` clubes ──────────────────────────────────────────┐ β”‚ id_club, nombre, imagen, qr_background β”‚ β”‚ β”‚ β”œβ”€β”€β–Ί equipos β”‚ β”‚ id_equipo, id_club, categoria, division β”‚ β”‚ β”‚ β”‚ β”‚ └──► jugador_equipo ◄──── jugadores β”˜ β”‚ id_jugador, id_equipo id_jugador, documento, β”‚ fecha_alta nombre, apellido, β”‚ fecha_nacimiento, β”‚ id_club_actual, activo β”‚ └──► eventos id_evento (UUID), nombre_evento, fecha_evento, hora_inicio, hora_fin, id_equipo_local, id_equipo_visitante, marcador_local, marcador_visitante, id_torneo, limite_qr_jugador β”‚ └──► qr_codes id_qr, id_evento, id_jugador | id_aficionado, tipo_qr, escaneos_restantes torneos id_torneo, nombre, aΓ±o β”‚ └──► torneo_equipo (grupo, puntos, ...) └──► eventos (fase del torneo) promociones ──► promo_qrs aficionados admin_users (role: 1=SuperAdmin, 2=Admin Club) ``` --- ## πŸ‘₯ Roles del Sistema El sistema implementa **RBAC (Control de Acceso Basado en Roles)** con 4 perfiles: | Rol | DescripciΓ³n | Acceso | |---|---|---| | **Visitante** | Sin cuenta | Solo pΓ‘ginas pΓΊblicas | | **Jugador** | Deportista federado | Panel usuario (acceso federado) | | **Aficionado** | Hincha registrado | Panel usuario (acceso general) | | **Admin de Club** | Gestor de una instituciΓ³n | Panel admin (scope limitado a su club) | | **SΓΊper Admin** | Personal de OnAPB | Panel admin (acceso total) | --- ## 🌐 Funcionalidades por Rol ### Visitante (sin cuenta) - Navegar la cartelera de prΓ³ximos eventos - Ver el detalle de cada partido (equipos, fecha, sede) - Ver la secciΓ³n de Noticias - Ver Promociones y locales con beneficios - Ver Posiciones y Tabla de Goleadores de torneos ### Jugador / Aficionado (panel usuario) - Solicitar y ver sus CΓ³digos QR de acceso a partidos - Generar QR de beneficio para promociones - Editar datos de contacto y cambiar contraseΓ±a - Recibir notificaciones internas del sistema - Seguir equipos favoritos ### Admin de Club (panel admin β€” scope de su club) - Ver y gestionar jugadores del club - Ver y gestionar equipos del club - Editar logo e identidad visual del club (QR Background) - Gestionar pases (traspasos) de jugadores - Escanear y validar QRs en eventos de su club ### SΓΊper Admin (panel admin β€” acceso total) - **Todo lo del Admin de Club**, mΓ‘s: - ABM completo de Clubes, Equipos y Jugadores (globalmente) - ABM de Eventos / Partidos (calendarizaciΓ³n) - ABM de Torneos + generaciΓ³n de fixtures + bracket de playoffs - GestiΓ³n del carrusel/hero de la pΓ‘gina de inicio - GestiΓ³n de Sponsors - ABM de Noticias y Promociones - ConfiguraciΓ³n general del sistema - GestiΓ³n de usuarios administradores - ImportaciΓ³n/ExportaciΓ³n masiva de jugadores (CSV multiformato) --- ## βœ… Suite de Pruebas El proyecto cuenta con **Feature Tests** ejecutables con PHPUnit: ```bash php artisan test ``` | Archivo | Casos de Prueba | |---|---| | `AuthTest.php` | Login admin Β· Login jugador Β· Login aficionado Β· Cierre de sesiΓ³n | | `AdminTest.php` | Acceso denegado a visitantes/jugadores Β· Acceso SuperAdmin Β· CreaciΓ³n de club | | `EventoQRTest.php` | Solicitud de QR por aficionado Β· PrevenciΓ³n de QR duplicado | | `JugadorCreationTest.php` | Error por DNI duplicado con nombre de club Β· Vista de admin de club | | `CleanupTest.php` | Limpieza de eventos viejos | --- ## πŸ’Ύ RecuperaciΓ³n ante Fallos - **SoftDeletes** en modelos crΓ­ticos: `Club`, `Equipo`, `Jugador`, `Evento` β€” los registros eliminados no se borran fΓ­sicamente de la base de datos, son recuperables. - **Backups automΓ‘ticos** con `spatie/laravel-backup` β€” respalda la base de datos y los archivos de almacenamiento en forma programada. ```bash # Ejecutar backup manual php artisan backup:run --only-db ``` --- ## πŸ€– Tareas AutomΓ‘ticas (Scheduler) | Comando | DescripciΓ³n | Frecuencia | |---|---|---| | `reportes:semanal` | Genera y envΓ­a reporte de actividad a admins | Semanal | | `recordatorio:partidos` | EnvΓ­a recordatorio de prΓ³ximos partidos | Diaria | | `cleanup:old-events` | Limpia QRs de eventos finalizados | Configurable | --- ## βš™οΈ InstalaciΓ³n Local ```bash # 1. Clonar el repositorio git clone # 2. Instalar dependencias composer install npm install && npm run build # 3. Configurar entorno cp .env.example .env php artisan key:generate # 4. Configurar .env (DB_DATABASE, DB_USERNAME, DB_PASSWORD, MAIL_*, etc.) # 5. Migrar y poblar la base de datos php artisan migrate:fresh --seed # 6. Enlazar carpeta de almacenamiento php artisan storage:link # 7. Iniciar servidor php artisan serve ``` --- ## πŸ§ͺ Variables de Entorno Relevantes | Variable | DescripciΓ³n | |---|---| | `DB_DATABASE` | Nombre de la base de datos | | `MAIL_HOST` / `MAIL_PORT` | Servidor SMTP para envΓ­o de correos | | `TURNSTILE_SITE_KEY` | Clave pΓΊblica de Cloudflare Turnstile (anti-bot) | | `TURNSTILE_SECRET_KEY` | Clave privada de Cloudflare Turnstile | | `APP_URL` | URL base de la aplicaciΓ³n | --- *Proyecto desarrollado como Software Integrador para la materia Taller de IntegraciΓ³n β€” FCYT UADER, Oro Verde.*