reserva - PowerSystem2024/CapybaraFilms_ProyectoTercerSemestre GitHub Wiki
La entidad Reserva
actúa como agregado raíz del dominio, orquestando una transacción completa de reserva de cine.
- Coordinar todos los componentes de una reserva (cliente, sala, butacas, combos)
- Calcular el precio total de la reserva
- Generar resúmenes detallados para el cliente
- Gestionar la fecha/hora de la reserva
- Mantener la integridad del agregado
Atributo | Tipo | Propósito | Valor por Defecto |
---|---|---|---|
id_reserva |
str | Identificador único | Asignado por BD |
cliente |
Cliente | Cliente que reserva | Requerido |
sala |
Sala | Sala de cine | Requerido |
candy |
list[Candy] | Combos seleccionados | Lista vacía |
butacas_asignadas |
list[Butaca] | Butacas reservadas | Lista vacía |
fecha_hora |
datetime | Timestamp de reserva | datetime.now() |
reserva = Reserva(cliente, sala, candy=[combo1, combo2], butacas_asignadas=[butaca1, butaca2])
precio_total = reserva.calcular_precio_total()
print(f"Total a pagar: ${precio_total}")
reserva.mostrar_resumen()
# Imprime resumen detallado con:
# - Información del cliente
# - Butacas reservadas con precios
# - Combos seleccionados
# - Total a pagar
La entidad Reserva
implementa manejo robusto de errores:
- Captura errores al obtener categoría de butacas
- Maneja errores al acceder a precios de combos
- Continúa el cálculo aunque falle un elemento individual
- Captura errores generales durante la presentación
- Proporciona mensajes de error descriptivos
graph TD
ReservaDAO --> Reserva
CineServices --> Reserva
subgraph Reserva - Aggregate Root
Reserva["Reserva - Aggregate Root
- calcular_precio_total
- mostrar_resumen"]
end
Reserva --> Cliente["Cliente
- nombre, apellido, email"]
Reserva --> Sala["Sala
- id_sala"]
Reserva --> Butaca["Butaca
- categoria, fila, columna"]
Reserva --> Candy["Candy
- tipo, precio"]
Butaca --> TipoButaca
Candy --> TipoCandy
- Agregado raíz: Controla acceso a entidades relacionadas
- Con TipoButaca: Utiliza enum para cálculo de precios
- Con CineServices: Integración para obtener precios por categoría
- Con ReservaDAO: Persistencia del agregado completo
-
Reserva
controla el acceso a todas las entidades relacionadas - Mantiene la consistencia del dominio
- Coordina operaciones complejas entre múltiples entidades
- Utiliza
CineServices.obtener_precio_por_categoria()
para cálculos - Delega validaciones específicas a servicios apropiados
La entidad Reserva
demuestra cómo un agregado raíz puede coordinar múltiples entidades mientras mantiene la integridad del dominio y proporciona una interfaz cohesiva para operaciones complejas de negocio.