- 
                Notifications
    
You must be signed in to change notification settings  - Fork 0
 
main

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
finallygarantiza 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.pyen otros módulos sin ejecutar el flujo automáticamente. - 
Es ideal para pruebas o entornos donde se desee modularizar.
 
- 
main.pyno contiene lógica de negocio compleja: delega toda esa responsabilidad aCineServicesy 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.
 
💾 Repositorio: Capybara Films en GitHub
© 2025 Capybara Films — Desarrollado por Carpinchos Programando
- 🏗️ Arquitectura del Sistema
 - 📄 main.py
 - 📁 data/
 - 📁 daos/
 - 📁 domain/entities/
 - 📁 domain/entities/types
 - 📁 services/
 
- ⚙️ Cómo Instalar y Ejecutar el Proyecto
 - 🛠️ Cómo contribuir
 - 🧪 Probar el Sistema Paso a Paso
 - 🐞 Errores Comunes y Soluciones