32 lines
933 B
Python
32 lines
933 B
Python
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()
|