Coverage for backend \ app \ Productos \ repositories \ categoriaProductoRepository.py: 20.00%

60 statements  

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

1from app.Productos.models.categoriaProductoModel import CategoriaProducto 

2from app.Productos.schemas.categoriaProductoSchemas import * 

3from app.Productos.models.productoModel import Producto 

4 

5class CategoriaProductoRepository: 

6 def __init__(self, dbSession): 

7 self.dbSession = dbSession 

8 

9 def listarCategorias(self): 

10 return self.dbSession.query(CategoriaProducto).all() 

11 

12 def obtenerPorId(self, idCategoria: int): 

13 return self.dbSession.query(CategoriaProducto).filter(CategoriaProducto.idCategoriaProducto == idCategoria).first() 

14 

15 def validarNombreExistente(self, nombre: str, excluirId: int = None): 

16 query = self.dbSession.query(CategoriaProducto).filter(CategoriaProducto.nombreCategoria == nombre) 

17 if excluirId is not None: 

18 query = query.filter(CategoriaProducto.idCategoriaProducto != excluirId) 

19 return query.first() 

20 

21 def crearCategoria(self, categoria: CategoriaProductoCrearSchema): 

22 if self.validarNombreExistente(categoria.nombreCategoria): 

23 return None 

24 nuevo = CategoriaProducto(nombreCategoria=categoria.nombreCategoria, activoCategoria=True) 

25 self.dbSession.add(nuevo) 

26 self.dbSession.commit() 

27 self.dbSession.refresh(nuevo) 

28 return nuevo 

29 

30 def modificarCategoria(self, idCategoria: int, categoriaActualizar: CategoriaProductoActualizarSchema): 

31 categoria = self.obtenerPorId(idCategoria) 

32 if not categoria: 

33 return None 

34 datos = categoriaActualizar.model_dump(exclude_unset=True) 

35 # Validar nombre: si existe y pertenece a otro id => conflicto 

36 if "nombreCategoria" in datos: 

37 nombreNuevo = datos["nombreCategoria"] 

38 existente = self.validarNombreExistente(nombreNuevo) 

39 if existente and existente.idCategoriaProducto != idCategoria: 

40 return False 

41 for campo, valor in datos.items(): 

42 if campo in ["nombreCategoria", "activoCategoria"]: 

43 setattr(categoria, campo, valor) 

44 self.dbSession.commit() 

45 self.dbSession.refresh(categoria) 

46 return categoria 

47 

48 def deshabilitarCategoria(self, idCategoria: int): 

49 categoria = self.obtenerPorId(idCategoria) 

50 if not categoria: 

51 return None 

52 # Verificar que no existan productos activos asociados 

53 productoActivo = self.dbSession.query(Producto).filter(Producto.idCategoriaProducto == idCategoria, Producto.activoProducto == True).first() 

54 if productoActivo: 

55 return False 

56 categoria.activoCategoria = False 

57 self.dbSession.commit() 

58 self.dbSession.refresh(categoria) 

59 return categoria 

60 

61 def crearCategoriasIniciales(self): 

62 categorias = [ 

63 {"nombreCategoria": "Bebidas", "activoCategoria": True}, 

64 {"nombreCategoria": "Snacks", "activoCategoria": True}, 

65 {"nombreCategoria": "Abarrotes", "activoCategoria": True}, 

66 {"nombreCategoria": "Aseo y Limpieza", "activoCategoria": True}, 

67 {"nombreCategoria": "Higiene Personal", "activoCategoria": True}, 

68 ] 

69 

70 for c in categorias: 

71 existe = self.validarNombreExistente(c["nombreCategoria"]) 

72 if not existe: 

73 nuevo = CategoriaProducto(**c) 

74 self.dbSession.add(nuevo) 

75 print("Categorías por defecto creadas...!") 

76 self.dbSession.commit() 

77 self.dbSession.close()