26 lines
666 B
Python
26 lines
666 B
Python
"""Generic async repository primitives."""
|
|
|
|
from typing import Generic, TypeVar
|
|
from uuid import UUID
|
|
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.database.base import Base
|
|
|
|
ModelT = TypeVar("ModelT", bound=Base)
|
|
|
|
|
|
class BaseRepository(Generic[ModelT]):
|
|
def __init__(self, session: AsyncSession, model: type[ModelT]) -> None:
|
|
self.session = session
|
|
self.model = model
|
|
|
|
async def add(self, entity: ModelT) -> ModelT:
|
|
self.session.add(entity)
|
|
await self.session.flush()
|
|
return entity
|
|
|
|
async def get(self, entity_id: UUID) -> ModelT | None:
|
|
return await self.session.get(self.model, entity_id)
|
|
|