Saltar al contenido

file_download
Proyecto final
N/A
play_circle_outline
vista previa
4 minutos

play_circle_outline
vista previa
3 minutos
play_circle_outline
vista previa
4 minutos
play_circle_outline
vista previa
7 minutos
play_circle_outline
vista previa
2 minutos

play_circle_outline
vista previa
3 minutos
play_circle_outline
vista previa
3 minutos
play_circle_outline
vista previa
12 minutos
play_circle_outline
vista previa
13 minutos
play_circle_outline
vista previa
6 minutos
play_circle_outline
vista previa
4 minutos

play_circle_outline
vista previa
8 minutos
play_circle_outline
vista previa
7 minutos
play_circle_outline
vista previa
6 minutos
play_circle_outline
vista previa
4 minutos
play_circle_outline
vista previa
5 minutos

play_circle_outline
vista previa
6 minutos
play_circle_outline
vista previa
4 minutos
play_circle_outline
Acción registrar usuario
2 minutos
play_circle_outline
Controlador, ruta y prueba completa registro
8 minutos
play_circle_outline
Proceso completo login usuarios
9 minutos
play_circle_outline
Proceso completo logout usuarios
8 minutos

play_circle_outline
Modelando eventos con EventResource
4 minutos
play_circle_outline
Endpoints completos listado y detalle eventos
10 minutos

play_circle_outline
Form Request add item to cart
2 minutos
play_circle_outline
Passable add item to cart
3 minutos
play_circle_outline
Pipe Validación add item to cart
7 minutos
play_circle_outline
Pipe Obtener carrito del usuario
3 minutos
play_circle_outline
Pipe Comprobar item existente
3 minutos
play_circle_outline
Pipe Guardar carrito
4 minutos
play_circle_outline
Action add item to cart
4 minutos
play_circle_outline
Modelando cart items con CartItemResource
3 minutos
play_circle_outline
Controlador Cart y método addItem
3 minutos
play_circle_outline
Probar endpoint add item to cart
5 minutos

play_circle_outline
Modelando cart con CartResource
2 minutos
play_circle_outline
Form Request update cart item
2 minutos
play_circle_outline
Acción actualizar item carrito
3 minutos
play_circle_outline
Acción eliminar item carrito
1 minutos
play_circle_outline
Acción vaciar carrito
2 minutos
play_circle_outline
Completar controlador Cart con resto de endpoints
8 minutos
play_circle_outline
Añadir rutas restantes carrito y probar
9 minutos

play_circle_outline
Intro sección crear reservas
2 minutos
play_circle_outline
Evento ReservationCreated
3 minutos
play_circle_outline
Notificación ReservationCreated
7 minutos
play_circle_outline
Listener SendReservationCreatedNotification
3 minutos
play_circle_outline
Passable create reservation
5 minutos
play_circle_outline
Pipe validar propiedad del carrito
4 minutos
play_circle_outline
Pipe bloquear y validar eventos
6 minutos
play_circle_outline
Pipe bloquear stock evento
3 minutos
play_circle_outline
Pipe crear reservas
7 minutos
play_circle_outline
Pipe vaciar carrito
2 minutos
play_circle_outline
Acción create reservation
4 minutos
play_circle_outline
Modelando reservas con ReservationResource
4 minutos
play_circle_outline
Controlador Reservation y métodos index, show, store
5 minutos
play_circle_outline
Probar todo el proceso de crear reservas
11 minutos

play_circle_outline
Evento, Listener y Notification ReservationConfirmed
5 minutos
play_circle_outline
Passable confirm reservation
2 minutos
play_circle_outline
Pipe validate reservation ownership
3 minutos
play_circle_outline
Pipe validate reservation status
3 minutos
play_circle_outline
Pipe decrement reserved tickets
2 minutos
play_circle_outline
Pipe update reservation status
3 minutos
play_circle_outline
Pipe create order
3 minutos
play_circle_outline
Pipe dispatch reservation confirmed event
2 minutos
play_circle_outline
Acción confirm reservation
4 minutos
play_circle_outline
Resource, Controlador y Ruta confirm
4 minutos
play_circle_outline
Probar todo el proceso de confirmar reservas
7 minutos

play_circle_outline
Evento, Listener y Notification ReservationCanceled
5 minutos
play_circle_outline
Passable cancel reservation
2 minutos
play_circle_outline
Pipe validate reservation ownership
4 minutos
play_circle_outline
Pipe validate reservation is cancellable
2 minutos
play_circle_outline
Pipe update reservation status
2 minutos
play_circle_outline
Pipe restore event stock
3 minutos
play_circle_outline
Pipe dispatch reservation cancelled event
2 minutos
play_circle_outline
Acción cancelar reserva
3 minutos
play_circle_outline
Endpoint completo para cancelar reservas
3 minutos
play_circle_outline
Probar todo el proceso de cancelar reservas
2 minutos

play_circle_outline
Intro sección liberar reservas expiradas automáticamente
5 minutos
play_circle_outline
Evento, Listener y Notificación ReservationExpired
4 minutos
play_circle_outline
Acción release expired reservations
6 minutos
play_circle_outline
Comando ReleaseExpiredReservations y rutas consola
7 minutos
play_circle_outline
Probar todo el proceso de expirar reservas automáticamente
8 minutos

play_circle_outline
Listado y detalle de pedidos completo
5 minutos

play_circle_outline
Intro Pest Framework Testing
6 minutos
play_circle_outline
Configuración entorno testing
7 minutos
play_circle_outline
Actualizar nuestro archivo Pest base
6 minutos
play_circle_outline
Tests autenticación - Registro completo
14 minutos
play_circle_outline
Tests autenticación - Login completo
6 minutos
play_circle_outline
Tests autenticación - Logout completo
4 minutos
play_circle_outline
Tests autenticación - Rutas protegidas completo
4 minutos
play_circle_outline
Tests eventos - Listado y detalle completo
11 minutos
Vídeo de introducción Sistema de Reservas con Arquitectura Limpia y Manejo de Concurrencia
play_circle_filled

Desbloquea el curso

starVer planes de suscripción
school

¿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.

assignment

Requisitos

Para aprovechar al máximo este curso, se recomienda tener conocimientos previos en las siguientes áreas:

group

¿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

help_outline

¿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.

card_membership

Certificado de finalización

emoji_events

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.

Especialista con +15 años de experiencia en desarrollo web Full Stack. Dominio avanzado en Laravel y Vue.js, creando aplicaciones modernas de alto rendimiento. Instructor profesional con 8 años compartiendo conocimiento a través de cursos especializados que han formado a cientos de desarrolladores.

Israel Parra

Desarrollador Full Stack & Formador

Valoraciones

5
star star star star star

1 valoraciones

star star star star star
star star star star star_border
star star star star_border star_border
star star star_border star_border star_border
star star_border star_border star_border star_border
Alan Ortega

hace 6 meses

Alan Ortega Un muy buen curso
star star star star star
Me gusto mucho el curso, pero sobre todo la estructura del curso, Estare al pendiente de las siguientes secciones sobretodo la de testing
visibility Vista previa

star

¿Te gusta lo que ves? Accede a este curso completo y a más de 200 cursos con una suscripción.

launch Ver planes de suscripción