"""UploadedFile 的 DAO。""" from __future__ import annotations from sqlalchemy import select from sqlalchemy.orm import Session from ..models.uploaded_file import UploadedFile class UploadedFileDAO: def __init__(self, db: Session) -> None: self.db = db def create(self, file: UploadedFile) -> UploadedFile: self.db.add(file) self.db.commit() self.db.refresh(file) return file def get_by_id(self, file_id: int) -> UploadedFile | None: return self.db.get(UploadedFile, file_id) def get_by_sha256(self, sha256: str) -> UploadedFile | None: stmt = select(UploadedFile).where(UploadedFile.sha256 == sha256).limit(1) return self.db.scalars(stmt).first() def list(self, limit: int = 100, offset: int = 0) -> list[UploadedFile]: stmt = ( select(UploadedFile) .order_by(UploadedFile.uploaded_at.desc()) .limit(limit) .offset(offset) ) return list(self.db.scalars(stmt).all()) def delete(self, file_id: int) -> bool: file = self.get_by_id(file_id) if file is None: return False self.db.delete(file) self.db.commit() return True