96 lines
2.6 KiB
Python
96 lines
2.6 KiB
Python
"""
|
|
Chunk Upload Repository
|
|
分片上传数据访问层
|
|
"""
|
|
from typing import Optional, List
|
|
|
|
from sqlalchemy import select, update, delete
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.db.models.chunk_upload import ChunkUploadPreRequest
|
|
from app.core.logging import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
class ChunkUploadRepository:
|
|
"""分片上传数据访问层"""
|
|
|
|
async def find_by_id(
|
|
self,
|
|
req_id: str,
|
|
db: AsyncSession
|
|
) -> Optional[ChunkUploadPreRequest]:
|
|
"""根据ID查询"""
|
|
result = await db.execute(
|
|
select(ChunkUploadPreRequest).where(ChunkUploadPreRequest.id == req_id)
|
|
)
|
|
return result.scalar_one_or_none()
|
|
|
|
async def find_by_service_id(
|
|
self,
|
|
service_id: str,
|
|
db: AsyncSession
|
|
) -> List[ChunkUploadPreRequest]:
|
|
"""根据服务ID查询"""
|
|
result = await db.execute(
|
|
select(ChunkUploadPreRequest).where(
|
|
ChunkUploadPreRequest.service_id == service_id
|
|
)
|
|
)
|
|
return result.scalars().all()
|
|
|
|
async def find_all(self, db: AsyncSession) -> List[ChunkUploadPreRequest]:
|
|
"""查询所有"""
|
|
result = await db.execute(select(ChunkUploadPreRequest))
|
|
return result.scalars().all()
|
|
|
|
async def insert(
|
|
self,
|
|
request: ChunkUploadPreRequest,
|
|
db: AsyncSession
|
|
) -> None:
|
|
"""插入"""
|
|
db.add(request)
|
|
|
|
async def update(
|
|
self,
|
|
request: ChunkUploadPreRequest,
|
|
db: AsyncSession
|
|
) -> int:
|
|
"""更新"""
|
|
from datetime import datetime, timezone
|
|
result = await db.execute(
|
|
update(ChunkUploadPreRequest)
|
|
.where(ChunkUploadPreRequest.id == request.id)
|
|
.values(
|
|
uploaded_file_num=request.uploaded_file_num,
|
|
timeout=request.timeout,
|
|
)
|
|
)
|
|
return result.rowcount
|
|
|
|
async def delete_by_id(
|
|
self,
|
|
req_id: str,
|
|
db: AsyncSession
|
|
) -> int:
|
|
"""根据ID删除"""
|
|
result = await db.execute(
|
|
delete(ChunkUploadPreRequest).where(ChunkUploadPreRequest.id == req_id)
|
|
)
|
|
return result.rowcount
|
|
|
|
async def delete_by_service_id(
|
|
self,
|
|
service_id: str,
|
|
db: AsyncSession
|
|
) -> int:
|
|
"""根据服务ID删除"""
|
|
result = await db.execute(
|
|
delete(ChunkUploadPreRequest).where(
|
|
ChunkUploadPreRequest.service_id == service_id
|
|
)
|
|
)
|
|
return result.rowcount
|