deepdata: core product code (backend, frontend, runtime, deepflow module)
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
"""
|
||||
切片查询服务 - 负责切片相关的查询操作
|
||||
"""
|
||||
from typing import List, Tuple
|
||||
|
||||
from sqlalchemy import select, func
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.db.models.data_synthesis import DataSynthesisChunkInstance
|
||||
from app.module.generation.schema.generation import (
|
||||
DataSynthesisChunkItem,
|
||||
PagedDataSynthesisChunkResponse,
|
||||
)
|
||||
|
||||
|
||||
class ChunkQueryService:
|
||||
"""切片查询服务 - 负责切片相关的查询操作"""
|
||||
|
||||
def __init__(self, db: AsyncSession):
|
||||
self.db = db
|
||||
|
||||
async def get_by_id(self, chunk_id: str) -> DataSynthesisChunkInstance | None:
|
||||
"""
|
||||
根据 ID 获取切片
|
||||
|
||||
Args:
|
||||
chunk_id: 切片 ID
|
||||
|
||||
Returns:
|
||||
切片实例,不存在则返回 None
|
||||
"""
|
||||
return await self.db.get(DataSynthesisChunkInstance, chunk_id)
|
||||
|
||||
async def list_by_file(
|
||||
self, file_id: str, page: int, page_size: int
|
||||
) -> Tuple[List[DataSynthesisChunkItem], int]:
|
||||
"""
|
||||
分页查询文件任务下的切片列表
|
||||
|
||||
Args:
|
||||
file_id: 文件任务 ID
|
||||
page: 页码
|
||||
page_size: 每页数量
|
||||
|
||||
Returns:
|
||||
(切片列表, 总数)
|
||||
"""
|
||||
base_query = select(DataSynthesisChunkInstance).where(
|
||||
DataSynthesisChunkInstance.synthesis_file_instance_id == file_id
|
||||
)
|
||||
|
||||
count_result = await self.db.execute(
|
||||
select(func.count()).select_from(base_query.subquery())
|
||||
)
|
||||
total = count_result.scalar_one() or 0
|
||||
|
||||
offset = max(page, 1) - 1
|
||||
limit = max(page_size, 1)
|
||||
result = await self.db.execute(
|
||||
base_query.order_by(DataSynthesisChunkInstance.chunk_index.asc())
|
||||
.offset(offset * limit)
|
||||
.limit(limit)
|
||||
)
|
||||
rows = result.scalars().all()
|
||||
|
||||
items = [DataSynthesisChunkItem.model_validate(row) for row in rows]
|
||||
return items, total
|
||||
Reference in New Issue
Block a user