main - PowerSystem2024/CapybaraFilms_ProyectoTercerSemestre GitHub Wiki
main.py
es el punto de entrada del sistema Capybara Films, y su función principal es orquestar el proceso completo de reserva de entradas desde la consola. Coordina la interacción con el usuario y la comunicación entre las distintas capas del sistema.
El archivo main.py
:
-
Inicializa los componentes principales del sistema.
-
Llama a los servicios que controlan la lógica del negocio.
-
Gestiona el flujo de interacción con el usuario.
-
Valida datos y delega la persistencia a los DAOs.
-
Maneja errores y asegura el cierre de recursos.
Forma parte de la Capa de Presentación, responsable de la interacción directa con el usuario.
El flujo de main.py
sigue un patrón claro de inicialización y ejecución secuencial. Antes de comenzar con el flujo de reserva, se crean todos los componentes necesarios para la operación del sistema.
graph TD
main.py --> ClienteDAO
main.py --> PeliculaDAO
main.py --> SalaDAO
main.py --> ButacaDAO
main.py --> ReservaDAO
main.py --> CineServices
main.py --> CandyDAO
ClienteDAO --> DatabaseConnection
PeliculaDAO --> DatabaseConnection
SalaDAO --> DatabaseConnection
ButacaDAO --> DatabaseConnection
ReservaDAO --> DatabaseConnection
CandyDAO --> DatabaseConnection
main.py --> DatabaseConnection
La función main() comienza estableciendo la conexión a la base de datos y creando instancias de los DAOs y servicios necesarios:
Componente | Propósito | Capa |
---|---|---|
DatabaseConnection |
Conexión a la base de datos PostgreSQL | Persistencia |
ClienteDAO |
Acceso a datos de clientes | Acceso a Datos (DAO) |
PeliculaDAO |
Acceso a datos de películas | Acceso a Datos (DAO) |
SalaDAO |
Acceso a datos de salas | Acceso a Datos (DAO) |
ButacaDAO |
Acceso a datos de butacas | Acceso a Datos (DAO) |
ReservaDAO |
Acceso a datos de reservas | Acceso a Datos (DAO) |
CandyDAO |
Acceso a datos de combos/golosinas | Acceso a Datos (DAO) |
CineServices |
Orquestador del proceso de reserva | Servicios |
El punto de entrada orquesta un flujo de reserva en 7 pasos, validando en cada uno la información ingresada:
-
1️⃣ Verificar Cliente
-
cine_services.verificar_y_validar_cliente(cliente_dao)
-
Si no se encuentra un cliente válido, el sistema finaliza.
-
Se limpia la pantalla tras validación.
-
-
2️⃣ Elegir Película
-
cine_services.elegir_pelicula(pelicula_dao)
-
El usuario elige una película válida para continuar.
-
-
3️⃣ Seleccionar Sala y Entradas
-
cine_services.seleccionar_sala_y_entradas(sala_dao, butaca_dao, pelicula)
-
Se recupera sala disponible y cantidad de entradas.
-
-
4️⃣ Selección de Butacas
-
cine_services.seleccionar_butacas(butaca_dao, cantidad_entradas, sala)
-
Se validan las butacas y se actualiza su estado.
-
-
5️⃣ Crear Reserva
-
reserva_dao.crear_reserva(cliente.id_cliente, sala.id_sala, ids_butacas)
-
Se crea la reserva en base de datos.
-
-
6️⃣ Selección de Combos (opcional)
-
cine_services.seleccionar_combos(candy_dao)
-
Se agregan los combos al objeto reserva (si los hay).
-
-
7️⃣ Mostrar Resumen
-
reserva.mostrar_resumen()
-
Se muestra mensaje de éxito personalizado.
-
main.py
utiliza bloques try-except-finally
para garantizar la estabilidad y limpieza de recursos:
try:
# Flujo principal de reserva
except Exception as e:
# Muestra mensaje de error crítico
finally:
try:
db_connection.cerrar_conexion()
except Exception as e:
print(f"Error cerrando la conexión: {e}")
-
Se captura cualquier error inesperado (Exception) durante la reserva.
-
Se imprime mensaje amigable al usuario sin traza técnica.
-
El
finally
garantiza el cierre de conexión incluso ante errores. -
Se captura también error al cerrar conexión por separado.
if __name__ == "__main__":
main()
-
Permite importar
main.py
en otros módulos sin ejecutar el flujo automáticamente. -
Es ideal para pruebas o entornos donde se desee modularizar.
-
main.py
no contiene lógica de negocio compleja: delega toda esa responsabilidad aCineServices
y a los DAOs. -
Utiliza impresión en consola como interfaz de usuario.
-
La validación de entradas se realiza a través del servicio
ServicioValidacion
, aunque no se instancia directamente en este archivo. -
Está diseñado de forma modular, por lo que es fácilmente testeable y mantenible.