¿Qué aprenderás?
Este curso te guía en la construcción de TicketFlow, un sistema de reservas temporales para eventos. El proyecto aborda un problema común en sistemas de e-commerce: gestionar recursos limitados cuando múltiples usuarios intentan acceder simultáneamente.
El Problema que Resolvemos
Imagina un concierto con 100 entradas disponibles. Dos usuarios añaden la última entrada a su carrito al mismo tiempo. Sin un sistema adecuado, ambos podrían completar la compra, vendiendo más entradas de las disponibles. TicketFlow implementa un sistema de reservas temporales que bloquea el inventario durante un tiempo limitado, garantizando que esto nunca ocurra.
Arquitectura del Sistema
Diseñamos una arquitectura limpia separando responsabilidades en capas bien definidas. Los repositorios abstraen el acceso a datos mediante interfaces, permitiendo que la lógica de negocio no dependa directamente de Eloquent. Las acciones encapsulan casos de uso específicos como registrar usuarios, añadir productos al carrito o confirmar reservas.
Para operaciones complejas que involucran múltiples pasos, implementamos el patrón Pipeline. Crear una reserva, por ejemplo, requiere validar el carrito, bloquear eventos con locks de base de datos, decrementar stock, crear los registros de reserva y vaciar el carrito. Cada paso es una clase independiente con una única responsabilidad, y si cualquier paso falla, toda la operación se revierte automáticamente.
Modelo de Datos y Flujo de Negocio
El sistema maneja cinco entidades principales: eventos con su inventario de entradas, carritos de compra por usuario, items del carrito con snapshot del precio, reservas temporales con fecha de expiración, y órdenes finales confirmadas.
El flujo completo funciona así: el usuario añade eventos a su carrito, luego convierte el carrito en una o más reservas temporales. En ese momento, las entradas se bloquean del inventario disponible y pasan a inventario reservado. El usuario tiene un tiempo configurable para confirmar, lo que genera una orden y libera el stock reservado definitivamente. Si no confirma a tiempo, un proceso automático expira la reserva y devuelve las entradas al inventario disponible.
Control de Concurrencia
El corazón del sistema es el manejo de concurrencia. Utilizamos bloqueos pesimistas a nivel de base de datos cuando se crean reservas. Esto significa que si dos usuarios intentan reservar las últimas entradas simultáneamente, uno esperará a que el otro termine su transacción antes de continuar. El segundo usuario recibirá un error indicando que no hay suficiente stock.
Mantenemos un modelo de doble contabilidad: entradas disponibles y entradas reservadas. Esto permite conocer en todo momento el estado real del inventario y detectar inconsistencias.
Sistema de Expiración Automática
Las reservas tienen un tiempo de vida configurable por evento. Un comando de Artisan ejecutado cada minuto por el scheduler busca reservas pendientes cuya fecha de expiración haya pasado. Para cada una, restaura el stock al inventario disponible, actualiza el estado a expirado y notifica al usuario.
Arquitectura Orientada a Eventos
Cada acción importante del sistema dispara un evento: reserva creada, confirmada, cancelada o expirada. Los listeners escuchan estos eventos y ejecutan acciones secundarias como enviar notificaciones por email. Todo esto ocurre de forma asíncrona mediante colas, sin bloquear la respuesta al usuario.
API RESTful Completa
Construimos una API completa con autenticación mediante tokens, endpoints para gestión del carrito, creación y gestión de reservas, y consulta de órdenes. Cada endpoint utiliza Form Requests para validación y Resources para transformar las respuestas.
Testing Exhaustivo
El curso incluye tests para cada funcionalidad: autenticación, gestión del carrito, ciclo de vida de reservas, consulta de órdenes y el comando de expiración. Lo más importante son los tests de concurrencia que verifican que el sistema previene correctamente el overselling cuando múltiples usuarios compiten por recursos limitados.
Herramientas y Configuración
Configuramos el entorno de desarrollo con Laravel Sail, implementamos documentación automática de la API, y establecemos herramientas de calidad de código para mantener consistencia en el proyecto.
Requisitos
Para aprovechar al máximo este curso, se recomienda tener conocimientos previos en las siguientes áreas:
PHP 8 y programación orientada a objetos — Ruta de PHP 8
Laravel Sail y entorno de desarrollo con Docker — WSL2 + Windows + Laravel Sail
Fundamentos de Laravel (rutas, controladores, modelos, migraciones) — Curso Laravel 11
APIs RESTful con Laravel — API REST Laravel
Comprensión básica de bases de datos relacionales y SQL
¿A quién va dirigido el curso?
Desarrolladores Laravel que quieren aprender patrones de arquitectura avanzados aplicados a un proyecto real
Programadores que necesitan entender cómo manejar concurrencia y evitar problemas de overselling en sistemas con recursos limitados
Desarrolladores backend que buscan implementar sistemas de reservas temporales, carritos de compra o gestión de inventario
Profesionales que quieren mejorar la estructura de sus proyectos Laravel aplicando Repository Pattern, Pipeline Pattern y arquitectura orientada a eventos
¿Qué hacer en caso de dudas durante el curso?
Los planes de suscripción trimestral y anual incluyen soporte a través del foro del curso.
Las dudas que se planteen en el foro del curso serán respondidas en un plazo máximo de 24 horas laborables.
Las dudas planteadas deben estar relacionadas con el contenido del curso y no con desarrollos personalizados que no estén relacionados con el curso.
Certificado de finalización
Al completar todas las lecciones del curso, obtendrás un certificado de finalización en formato PDF personalizado con tu nombre y un código QR de verificación.
- center_focus_weak Código QR con enlace al curso
- picture_as_pdf Descargable en formato PDF
- person Personalizado con tu nombre
star Disponible exclusivamente para suscriptores.
Valoraciones
1 valoraciones