48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
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()
|