from __future__ import annotations from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models.entities import PreviewArtifact class PreviewArtifactRepository: def __init__(self, session: AsyncSession) -> None: self.session = session async def get_by_version_and_type(self, file_version_id: str, artifact_type: str) -> PreviewArtifact | None: result = await self.session.execute( select(PreviewArtifact).where( PreviewArtifact.file_version_id == file_version_id, PreviewArtifact.artifact_type == artifact_type, ) ) return result.scalar_one_or_none() async def list_by_file_version(self, file_version_id: str) -> list[PreviewArtifact]: result = await self.session.execute( select(PreviewArtifact) .where(PreviewArtifact.file_version_id == file_version_id) .order_by(PreviewArtifact.artifact_type.asc()) ) return list(result.scalars().all()) async def create(self, artifact: PreviewArtifact) -> PreviewArtifact: self.session.add(artifact) await self.session.flush() await self.session.refresh(artifact) return artifact async def save(self, artifact: PreviewArtifact) -> PreviewArtifact: await self.session.flush() await self.session.refresh(artifact) return artifact