fix(P1): 素材列表status默认过滤+page/page_size分页支持
- status参数默认仅返回ready,自动排除deleted - 支持逗号分隔多状态筛选,传all返回所有状态 - 新增page/page_size分页参数,优先于skip/limit - repository层find/count统一增加status过滤参数
This commit is contained in:
@@ -16,15 +16,12 @@ class SQLAlchemyAssetRepository:
|
||||
library_id: str,
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
status: list[str] | None = None,
|
||||
) -> list[Asset]:
|
||||
models = (
|
||||
self.session.query(AssetModel)
|
||||
.filter(AssetModel.asset_library_id == library_id)
|
||||
.order_by(AssetModel.created_at.desc())
|
||||
.offset(skip)
|
||||
.limit(limit)
|
||||
.all()
|
||||
)
|
||||
query = self.session.query(AssetModel).filter(AssetModel.asset_library_id == library_id)
|
||||
if status:
|
||||
query = query.filter(AssetModel.status.in_(status))
|
||||
models = query.order_by(AssetModel.created_at.desc()).offset(skip).limit(limit).all()
|
||||
return [self._to_domain(model) for model in models]
|
||||
|
||||
def find_by_project(
|
||||
@@ -32,15 +29,12 @@ class SQLAlchemyAssetRepository:
|
||||
project_id: str,
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
status: list[str] | None = None,
|
||||
) -> list[Asset]:
|
||||
models = (
|
||||
self.session.query(AssetModel)
|
||||
.filter(AssetModel.project_id == project_id)
|
||||
.order_by(AssetModel.created_at.desc())
|
||||
.offset(skip)
|
||||
.limit(limit)
|
||||
.all()
|
||||
)
|
||||
query = self.session.query(AssetModel).filter(AssetModel.project_id == project_id)
|
||||
if status:
|
||||
query = query.filter(AssetModel.status.in_(status))
|
||||
models = query.order_by(AssetModel.created_at.desc()).offset(skip).limit(limit).all()
|
||||
return [self._to_domain(model) for model in models]
|
||||
|
||||
def find_by_library_and_file_type(
|
||||
@@ -49,15 +43,14 @@ class SQLAlchemyAssetRepository:
|
||||
file_type: str,
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
status: list[str] | None = None,
|
||||
) -> list[Asset]:
|
||||
models = (
|
||||
self.session.query(AssetModel)
|
||||
.filter(AssetModel.asset_library_id == library_id, AssetModel.file_type == file_type)
|
||||
.order_by(AssetModel.created_at.desc())
|
||||
.offset(skip)
|
||||
.limit(limit)
|
||||
.all()
|
||||
query = self.session.query(AssetModel).filter(
|
||||
AssetModel.asset_library_id == library_id, AssetModel.file_type == file_type
|
||||
)
|
||||
if status:
|
||||
query = query.filter(AssetModel.status.in_(status))
|
||||
models = query.order_by(AssetModel.created_at.desc()).offset(skip).limit(limit).all()
|
||||
return [self._to_domain(model) for model in models]
|
||||
|
||||
def find_by_id(self, asset_id: str) -> Asset | None:
|
||||
@@ -223,13 +216,19 @@ class SQLAlchemyAssetRepository:
|
||||
self.session.commit()
|
||||
return count
|
||||
|
||||
def count_by_project(self, project_id: str) -> int:
|
||||
return self.session.query(AssetModel).filter(AssetModel.project_id == project_id).count()
|
||||
def count_by_project(self, project_id: str, status: list[str] | None = None) -> int:
|
||||
query = self.session.query(AssetModel).filter(AssetModel.project_id == project_id)
|
||||
if status:
|
||||
query = query.filter(AssetModel.status.in_(status))
|
||||
return query.count()
|
||||
|
||||
def count_by_project_ids(self, project_ids: list[str]) -> int:
|
||||
def count_by_project_ids(self, project_ids: list[str], status: list[str] | None = None) -> int:
|
||||
if not project_ids:
|
||||
return 0
|
||||
return self.session.query(AssetModel).filter(AssetModel.project_id.in_(project_ids)).count()
|
||||
query = self.session.query(AssetModel).filter(AssetModel.project_id.in_(project_ids))
|
||||
if status:
|
||||
query = query.filter(AssetModel.status.in_(status))
|
||||
return query.count()
|
||||
|
||||
def sum_storage_by_project_ids(self, project_ids: list[str]) -> int:
|
||||
if not project_ids:
|
||||
|
||||
Reference in New Issue
Block a user