You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

41 lines
1.5 KiB

from __future__ import annotations
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.entities import Backend
class BackendRepository:
def __init__(self, session: AsyncSession) -> None:
self.session = session
async def get_by_name(self, name: str) -> Backend | None:
result = await self.session.execute(select(Backend).where(Backend.name == name))
return result.scalar_one_or_none()
async def get_by_id(self, backend_id: str) -> Backend | None:
return await self.session.get(Backend, backend_id)
async def create(self, backend: Backend) -> Backend:
self.session.add(backend)
await self.session.flush()
await self.session.refresh(backend)
return backend
async def list_all(self) -> list[Backend]:
result = await self.session.execute(select(Backend).order_by(Backend.write_priority.desc(), Backend.name.asc()))
return list(result.scalars().all())
async def list_enabled(self) -> list[Backend]:
result = await self.session.execute(
select(Backend)
.where(Backend.is_enabled.is_(True))
.order_by(Backend.write_priority.desc(), Backend.read_priority.desc(), Backend.name.asc())
)
return list(result.scalars().all())
async def save(self, backend: Backend) -> Backend:
await self.session.flush()
await self.session.refresh(backend)
return backend