Files
admin-edu-space/app/repositories/base_repository.py
T

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()