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
« 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
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
35app = FastAPI(
36 title="API DALCT Market",
37 description="Backend de DALCT Market",
38 version="0.1",
39)
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()
64@app.get("/", tags=["Inicio"], summary="Inicio", status_code=200, description="API DALCT Market")
65def inicio():
66 return {"mensaje": "API DALCT Market está lista...!"}
69# Registrar rutas
71# Usuarios
72app.include_router(controladorUsuariosPublic,prefix="/usuarios", tags=["Usuarios"])
73app.include_router(controladorUsuarios,prefix="/usuarios", tags=["Usuarios"])
75# Roles
76app.include_router(controladorRoles,prefix="/roles", tags=["Roles"])
78# Parametros de sistema
79app.include_router(controladorParametrosSistema,prefix="/parametrosistema", tags=["ParametrosSistema"])
82# Productos - CategoriaProducto
83app.include_router(controladorCategoriasProducto,prefix="/categoriaproducto", tags=["CategoriaProducto"])
85# Productos - Proveedor
86app.include_router(controladorProveedores,prefix="/proveedor", tags=["Proveedor"])
88# Productos - Producto
89app.include_router(controladorProductos,prefix="/producto", tags=["Producto"])
91# Inventario
92app.include_router(controladorInventario,prefix="/inventario", tags=["Inventario"])
94# Pedidos
95app.include_router(controladorPedidos,prefix="/pedido", tags=["Pedido"])
97# Clientes
98app.include_router(controladorClientes,prefix="/clientes", tags=["Clientes"])
100# Promociones
101app.include_router(controladorPromociones, prefix="/promocion", tags=["Promocion"])
103# Caja
104app.include_router(controladorCaja, prefix="/caja", tags=["Caja"])
106# Ventas
107app.include_router(controladorVenta, prefix="/venta", tags=["Venta"])
109# Reportes
110app.include_router(controladorReportes, prefix="/reportes", tags=["Reportes"])
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 )
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 )