from typing import Generic, Type, TypeVar, List, Any, Optional from sqlalchemy.orm import Session from sqlalchemy import select T = TypeVar("T") class BaseRepository(Generic[T]): def __init__(self, model: Type[T]): self.model = model def get_by_id(self, db: Session, id: Any) -> Optional[T]: return db.get(self.model, id) def get_all(self, db: Session, skip: int = 0, limit: int = 100) -> List[T]: stmt = select(self.model).offset(skip).limit(limit) return list(db.execute(stmt).scalars().all()) def create(self, db: Session, entity: T) -> T: db.add(entity) db.commit() db.refresh(entity) return entity def update(self, db: Session, entity: T) -> T: db.add(entity) db.commit() db.refresh(entity) return entity def delete(self, db: Session, entity: T) -> None: db.delete(entity) db.commit()