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