from typing import TypeVar, Generic, Type, Optional, List from app import db T = TypeVar('T') class BaseRepository(Generic[T]): """Repositorio base con operaciones CRUD genéricas y seguras.""" def __init__(self, model_class: Type[T]): self.model_class = model_class def get_by_id(self, entity_id: int) -> Optional[T]: """Obtiene una entidad por su ID numérico.""" if not entity_id: return None return db.session.get(self.model_class, entity_id) def get_all(self, order_by=None) -> List[T]: """Obtiene todas las entidades opcionalmente ordenadas.""" query = self.model_class.query if order_by is not None: query = query.order_by(order_by) return query.all() def save(self, entity: T, commit: bool = True) -> T: """Agrega o actualiza una entidad en la sesión.""" db.session.add(entity) if commit: db.session.commit() return entity def delete(self, entity: T, commit: bool = True) -> bool: """Elimina una entidad de la sesión.""" if entity: db.session.delete(entity) if commit: db.session.commit() return True return False def commit(self): """Confirma la transacción actual.""" db.session.commit() def rollback(self): """Revierte la transacción actual.""" db.session.rollback()