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.
39 lines
1.4 KiB
39 lines
1.4 KiB
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
|
|
|