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
« 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
8router = APIRouter()
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()
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)
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)
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)
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)
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)