Gemini
feat: add detailed logging
01d5a5d
from typing import Generic, TypeVar, Optional, List, Type
from sqlalchemy import select
from lpm_kernel.common.repository.database_session import DatabaseSession, Base
T = TypeVar("T", bound=Base)
class BaseRepository(Generic[T]):
def __init__(self, model: Type[T]):
self.model = model
self._db = DatabaseSession()
def get_by_id(self, id: int) -> Optional[T]:
with self._db.session() as session:
return session.get(self.model, id)
def create(self, entity: T) -> T:
with self._db.session() as session:
try:
session.add(entity)
session.commit()
session.refresh(entity)
return self.model.from_dict(entity.to_dict())
except Exception as e:
session.rollback()
raise
def update(self, entity: T) -> Optional[T]:
with self._db.session() as session:
try:
updated = session.merge(entity)
session.commit()
return updated
except Exception as e:
session.rollback()
raise
def delete(self, id: int) -> bool:
with self._db.session() as session:
try:
entity = session.get(self.model, id)
if entity:
session.delete(entity)
session.commit()
return True
return False
except Exception as e:
session.rollback()
raise
def list(self, filters: dict = None, limit: int = 100, offset: int = 0) -> List[T]:
with self._db.session() as session:
try:
query = select(self.model)
if filters:
query = query.filter_by(**filters)
query = query.limit(limit).offset(offset)
results = session.scalars(query).all()
return [self.model.from_dict(item.to_dict()) for item in results]
except Exception as e:
session.rollback()
raise