Coverage for backend \ app \ Venta \ controllers \ promocionController.py: 84.00%

25 statements  

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

1from fastapi import APIRouter, Depends 

2from app.Venta.services.promocionService import PromocionService 

3from app.Venta.schemas.promocionSchemas import * 

4from app.database import obtenerSesion 

5from app.configuracionGeneral.seguridadJWT import protegerRuta 

6from app.configuracionGeneral.schemasGenerales import respuestaApi 

7 

8router = APIRouter() 

9 

10@router.get("/", tags=["Promocion"], summary="Listar todas las promociones", description="Devuelve todas las promociones registradas (activas e inactivas). Útil para administradores y cajeros para aplicar sobre las ventas.", status_code=200, response_model=respuestaApi) 

11async def listar_promociones(dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Promocion", "GET"))): 

12 return PromocionService(dbSession).listarPromociones() 

13 

14@router.post("/", tags=["Promocion"], summary="Crear promoción", description="Crear una nueva promoción. Sólo el rol Administrador puede crear promociones.", status_code=201, response_model=respuestaApi) 

15async def crear_promocion(promocion: PromocionCrearSchema, dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Promocion", "POST"))): 

16 return PromocionService(dbSession).crearPromocion(promocion, usuario) 

17 

18@router.get("/{idPromocion}", tags=["Promocion"], summary="Obtener promoción por id", description="Obtener los detalles de una promoción específica por su id.", status_code=200, response_model=respuestaApi) 

19async def obtener_promocion(idPromocion: int, dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Promocion", "GET"))): 

20 return PromocionService(dbSession).obtenerPorId(idPromocion) 

21 

22@router.get("/producto/{idProducto}", tags=["Promocion"], summary="Obtener promociones activas por producto", description="Devuelve las promociones activas para un producto (aquellas cuya fecha de fin no ha pasado).", status_code=200, response_model=respuestaApi) 

23async def promociones_por_producto(idProducto: int, dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Promocion", "GET"))): 

24 return PromocionService(dbSession).obtenerActivasPorProducto(idProducto) 

25 

26@router.delete("/{idPromocion}", tags=["Promocion"], summary="Deshabilitar promoción", description="Deshabilitar una promoción existente. Sólo el rol Administrador puede deshabilitar promociones.", status_code=200, response_model=respuestaApi) 

27async def deshabilitar_promocion(idPromocion: int, dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Promocion", "DELETE"))): 

28 return PromocionService(dbSession).deshabilitarPromocion(idPromocion) 

29 

30@router.get("/aplicable/{idProducto}", tags=["Promocion"], summary="Obtener promoción aplicable (activa y mayor descuento) para un producto", description="Devuelve la promoción activa aplicable para un producto: la promoción activa con mayor porcentaje de descuento.", status_code=200, response_model=respuestaApi) 

31async def promocion_aplicable(idProducto: int, dbSession=Depends(obtenerSesion), usuario=Depends(protegerRuta("Promocion", "GET"))): 

32 return PromocionService(dbSession).obtenerPromocionAplicable(idProducto)