Coverage for backend \ app \ main.py: 75.00%

72 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-29 16:13 -0500

1from fastapi import FastAPI, Depends 

2from fastapi.exceptions import HTTPException 

3from fastapi.responses import JSONResponse 

4from fastapi.requests import Request 

5from app.configuracionGeneral.seguridadJWT import protegerRuta 

6from app.database import Base,engine,obtenerSesionDirecta 

7 

8# Librerias de rutas 

9from app.Usuarios.controllers.usuarioController import router as controladorUsuarios 

10from app.Usuarios.controllers.usuarioController import publicRouter as controladorUsuariosPublic 

11from app.Usuarios.repositories.usuarioRepository import UsuarioRepository 

12from app.Usuarios.controllers.rolController import router as controladorRoles 

13from app.Usuarios.repositories.rolRepository import RolRepository 

14from app.ParametrosSistema.controllers.parametroSistemaController import router as controladorParametrosSistema 

15from app.ParametrosSistema.repositories.parametroSistemaRepository import ParametroSistemaRepository 

16from app.Productos.controllers.categoriaProductoController import router as controladorCategoriasProducto 

17from app.Productos.repositories.categoriaProductoRepository import CategoriaProductoRepository 

18from app.Productos.controllers.proveedorController import router as controladorProveedores 

19from app.Productos.repositories.proveedorRepository import ProveedorRepository 

20from app.Productos.controllers.productoController import router as controladorProductos 

21from app.Productos.repositories.productoRepository import ProductoRepository 

22from app.Inventario.controllers.inventarioController import router as controladorInventario 

23from app.Inventario.repositories.inventarioRepository import InventarioRepository 

24from app.Pedido.controllers.pedidoController import router as controladorPedidos 

25from app.Pedido.repositories.pedidoRepository import PedidoRepository 

26from app.Clientes.controllers.clienteController import router as controladorClientes 

27from app.Clientes.repositories.clienteRepository import ClienteRepository 

28from app.Venta.controllers.promocionController import router as controladorPromociones 

29from app.Venta.repositories.promocionRepository import PromocionRepository 

30from app.Caja.controllers.cajaController import router as controladorCaja 

31from app.Venta.controllers.ventaController import router as controladorVenta 

32from app.Reportes.controllers.reporteController import router as controladorReportes 

33 

34 

35app = FastAPI( 

36 title="API DALCT Market", 

37 description="Backend de DALCT Market", 

38 version="0.1", 

39) 

40 

41@app.on_event("startup") 

42async def startup_event(): 

43 print("Iniciando API DALCT Market...") 

44 print("Conectando a la base de datos...") 

45 Base.metadata.create_all(bind=engine) 

46 print("Base de datos conectada...") 

47 #Crear datos por defecto 

48 RolRepository(obtenerSesionDirecta()).crearRolesPorDefecto() 

49 UsuarioRepository(obtenerSesionDirecta()).crearUsuariosIniciales() 

50 ParametroSistemaRepository(obtenerSesionDirecta()).crearParametrosIniciales() 

51 # Clientes por defecto 

52 ClienteRepository(obtenerSesionDirecta()).crearClientesIniciales() 

53 # Categorías de producto por defecto 

54 CategoriaProductoRepository(obtenerSesionDirecta()).crearCategoriasIniciales() 

55 # Proveedores por defecto 

56 ProveedorRepository(obtenerSesionDirecta()).crearProveedoresIniciales() 

57 # Productos por defecto 

58 ProductoRepository(obtenerSesionDirecta()).crearProductosIniciales() 

59 # Pedidos de ejemplo (admin auto-aprobado y pedido pendiente de bodeguero) 

60 PedidoRepository(obtenerSesionDirecta()).crearPedidosIniciales() 

61 # Promociones de ejemplo (una pasada y otra vigente) 

62 PromocionRepository(obtenerSesionDirecta()).crearPromocionesIniciales() 

63 

64@app.get("/", tags=["Inicio"], summary="Inicio", status_code=200, description="API DALCT Market") 

65def inicio(): 

66 return {"mensaje": "API DALCT Market está lista...!"} 

67 

68 

69# Registrar rutas 

70 

71# Usuarios 

72app.include_router(controladorUsuariosPublic,prefix="/usuarios", tags=["Usuarios"]) 

73app.include_router(controladorUsuarios,prefix="/usuarios", tags=["Usuarios"]) 

74 

75# Roles 

76app.include_router(controladorRoles,prefix="/roles", tags=["Roles"]) 

77 

78# Parametros de sistema 

79app.include_router(controladorParametrosSistema,prefix="/parametrosistema", tags=["ParametrosSistema"]) 

80 

81 

82# Productos - CategoriaProducto 

83app.include_router(controladorCategoriasProducto,prefix="/categoriaproducto", tags=["CategoriaProducto"]) 

84 

85# Productos - Proveedor 

86app.include_router(controladorProveedores,prefix="/proveedor", tags=["Proveedor"]) 

87 

88# Productos - Producto 

89app.include_router(controladorProductos,prefix="/producto", tags=["Producto"]) 

90 

91# Inventario 

92app.include_router(controladorInventario,prefix="/inventario", tags=["Inventario"]) 

93 

94# Pedidos 

95app.include_router(controladorPedidos,prefix="/pedido", tags=["Pedido"]) 

96 

97# Clientes 

98app.include_router(controladorClientes,prefix="/clientes", tags=["Clientes"]) 

99 

100# Promociones 

101app.include_router(controladorPromociones, prefix="/promocion", tags=["Promocion"]) 

102 

103# Caja 

104app.include_router(controladorCaja, prefix="/caja", tags=["Caja"]) 

105 

106# Ventas 

107app.include_router(controladorVenta, prefix="/venta", tags=["Venta"]) 

108 

109# Reportes 

110app.include_router(controladorReportes, prefix="/reportes", tags=["Reportes"]) 

111 

112# Configurar errores globales 

113# 🔴 ERRORES HTTP 

114@app.exception_handler(HTTPException) 

115async def manejarErroresHttp(request: Request, exc: HTTPException): 

116 # Cambiamos el mensaje si viene de OAuth2 

117 mensaje = exc.detail 

118 if mensaje == "Not authenticated": 

119 mensaje = "No autenticado, debe iniciar sesión y proporcionar un token JWT" 

120 return JSONResponse( 

121 status_code=exc.status_code, 

122 content={"success": False, "message": mensaje, "data": None} 

123 ) 

124 

125 

126# 🔴 ERRORES INTERNOS 

127@app.exception_handler(Exception) 

128async def manejarErroresGenerales(request: Request, exc: Exception): 

129 return JSONResponse( 

130 status_code=500, 

131 content={"success": False, "message": "errorInternoServidor", "data": None} 

132 )