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
« 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
5class CategoriaProductoRepository:
6 def __init__(self, dbSession):
7 self.dbSession = dbSession
9 def listarCategorias(self):
10 return self.dbSession.query(CategoriaProducto).all()
12 def obtenerPorId(self, idCategoria: int):
13 return self.dbSession.query(CategoriaProducto).filter(CategoriaProducto.idCategoriaProducto == idCategoria).first()
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()
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
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
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
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 ]
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()