32 lines
943 B
Python
32 lines
943 B
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import TYPE_CHECKING, Protocol
|
||
|
|
from uuid import UUID
|
||
|
|
|
||
|
|
from sqlalchemy import select
|
||
|
|
|
||
|
|
from core.db.base_repository import BaseRepository
|
||
|
|
from models.memories import Memory
|
||
|
|
|
||
|
|
if TYPE_CHECKING:
|
||
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
|
|
||
|
|
|
||
|
|
class MemoriesRepositoryLike(Protocol):
|
||
|
|
async def get_active_memories(self, *, owner_id: UUID) -> list[Memory]: ...
|
||
|
|
|
||
|
|
|
||
|
|
class MemoriesRepository(BaseRepository[Memory]):
|
||
|
|
def __init__(self, session: AsyncSession) -> None:
|
||
|
|
super().__init__(session=session, model=Memory)
|
||
|
|
|
||
|
|
async def get_active_memories(self, *, owner_id: UUID) -> list[Memory]:
|
||
|
|
stmt = (
|
||
|
|
select(Memory)
|
||
|
|
.where(Memory.owner_id == owner_id)
|
||
|
|
.where(Memory.status == "active")
|
||
|
|
.order_by(Memory.created_at.desc())
|
||
|
|
)
|
||
|
|
result = await self._session.execute(stmt)
|
||
|
|
return list(result.scalars().all())
|