This commit is contained in:
2026-03-12 12:32:29 +08:00
parent c0f9ddabbf
commit 470446fa6f
18 changed files with 591 additions and 142 deletions

View File

@@ -3,7 +3,7 @@ from uuid import UUID
from sqlalchemy import select, func
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.evidence_image import EvidenceImage, SourceApp, PageType
from app.models.evidence_image import EvidenceImage, SourceApp, PageType, OcrStatus
from app.repositories.base import BaseRepository
@@ -17,6 +17,17 @@ class ImageRepository(BaseRepository[EvidenceImage]):
)
return result.scalar_one_or_none()
async def find_by_hash_in_case(self, case_id: UUID, file_hashes: list[str]) -> EvidenceImage | None:
if not file_hashes:
return None
result = await self.session.execute(
select(EvidenceImage).where(
EvidenceImage.case_id == case_id,
EvidenceImage.file_hash.in_(file_hashes),
)
)
return result.scalar_one_or_none()
async def list_by_case(
self,
case_id: UUID,
@@ -37,3 +48,20 @@ class ImageRepository(BaseRepository[EvidenceImage]):
select(func.count()).select_from(EvidenceImage).where(EvidenceImage.case_id == case_id)
)
return result.scalar() or 0
async def list_for_ocr(self, case_id: UUID, include_done: bool = False) -> list[EvidenceImage]:
query = select(EvidenceImage).where(EvidenceImage.case_id == case_id)
if not include_done:
query = query.where(EvidenceImage.ocr_status != OcrStatus.done)
result = await self.session.execute(query.order_by(EvidenceImage.uploaded_at.desc()))
return list(result.scalars().all())
async def list_by_ids_in_case(self, case_id: UUID, image_ids: list[UUID]) -> list[EvidenceImage]:
if not image_ids:
return []
result = await self.session.execute(
select(EvidenceImage)
.where(EvidenceImage.case_id == case_id, EvidenceImage.id.in_(image_ids))
.order_by(EvidenceImage.uploaded_at.desc())
)
return list(result.scalars().all())