Plataforma e-commerce | INACAP TI3V21

Arquitectura de la solucion

El sistema esta separado en cuatro capas. Cada capa tiene una unica responsabilidad, lo que permite cambiar la base de datos o la interfaz sin tocar las reglas del negocio.

   main.py  (menu de consola)
        |
        +--> servicios/   validacion de entradas + API del dolar (requests)
        |
        +--> model/       clases del negocio, propiedades validadas y excepciones propias
        |
        +--> dao/         SQLite: CRUD, transacciones y consultas parametrizadas
                              |
                              +--> datos/clickandgo.db

El modelo de clases

Doce clases en total, una por archivo dentro de model/. Las relaciones siguen el diagrama UML de la Evaluacion Sumativa N1.

ClaseRol dentro del negocioArchivo
ClienteComprador; valida RUT o correomodel/cliente.py
Producto (abstracta)Contrato del catalogo: stock, precio y entregamodel/producto.py
ProductoFisicoDespacho por transporte con calculo de fletemodel/producto_fisico.py
ProductoElectronicaImportado en USD; hereda de ProductoFisicomodel/producto_electronica.py
ProductoDigitalEntrega inmediata con enlace y licencia, flete $0model/producto_digital.py
ProductoServicioAgenda una visita tecnica futuramodel/producto_servicio.py
DetallePedidoLinea de la transaccion; congela cantidad y preciomodel/detalle_pedido.py
PedidoTransaccion; aplica las dos reglas de negociomodel/pedido.py
Trabajador (abstracta)Personal y autenticacion (PBKDF2)model/trabajador.py
EncargadoBodegaDespacha, pero no modifica el catalogomodel/encargado_bodega.py
AdministradorControl total del catalogo y de los preciosmodel/administrador.py
ExcepcionesUna por cada regla que impide una operacionmodel/excepciones.py

Diagrama de clases UML

Diagrama de clases UML de ClickAndGo

Persistencia: cinco tablas

TablaGuardaRelacion
trabajadoresUsuarios, rol, hash PBKDF2 y saltIndependiente
clientesNombre e identificador validado1 a 0..* pedidos
productosLos cuatro tipos de producto en una sola tabla1 a * detalles
pedidosCabecera: cliente, fecha, estados y totales1 a 1..* detalles
detalle_pedidoLineas con cantidad y precio congeladoClave foranea al pedido

Las tablas se crean solas al iniciar el programa (dao/conexion.py), por lo que el sistema nunca depende de un script manual de instalacion.

Decisiones de seguridad

Inyeccion SQL

Todas las consultas usan parametros enlazados (? o :nombre). El texto que escribe el usuario nunca se concatena dentro de una sentencia SQL.

Validacion de entradas

Cada dato se valida por tipo, formato y rango antes de usarse. Las propiedades del modelo validan en el setter y los lectores de consola reintentan sin caer.

Autenticacion

Las contrasenas se guardan con PBKDF2-HMAC-SHA256 (120.000 iteraciones) y salt aleatorio, y se comparan con hmac.compare_digest.

Permisos (RBAC)

El encargado de bodega no puede modificar precios ni catalogo. La accion se bloquea con SinPermisoError, no con un simple mensaje.

Tiempo maximo de espera

La consulta a mindicador.cl usa timeout=5. Si la API falla, se usa el ultimo valor conocido y se informa el problema.

Transacciones atomicas

El pedido y sus lineas se graban en una sola transaccion SQL: o se guardan ambos o no se guarda nada.