Files
xiaoxia-saas/packages/adapters/in_memory/asset_library_repository.py
T
Audit Bot 37152a0729
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
fix: list_by_project → find_by_project (修复上传/诊断端点 500)
根因:upload.py、chunked_upload.py、asset_diagnosis.py 调用了
asset_library_repository.list_by_project(),但 SQLAlchemy 实现
只有 find_by_project(),导致 AttributeError → 500。

同步修复 InMemory 实现的方法名以保持一致。
2026-06-30 10:14:08 +08:00

46 lines
1.7 KiB
Python

"""AssetLibrary InMemory Repository 实现"""
from packages.domain import AssetLibrary, AssetLibraryKind
class InMemoryAssetLibraryRepository:
"""素材库 InMemory 仓储实现(用于同步用例和测试)"""
def __init__(self):
self._libraries: dict[str, AssetLibrary] = {}
def create(self, library: AssetLibrary) -> AssetLibrary:
self._libraries[library.id] = library
return library
def get(self, library_id: str) -> AssetLibrary | None:
return self._libraries.get(library_id)
def find_by_project(self, project_id: str, kind: AssetLibraryKind | None = None) -> list[AssetLibrary]:
items = [library for library in self._libraries.values() if library.project_id == project_id]
if kind is not None:
items = [library for library in items if library.kind == kind]
return items
def update(self, library: AssetLibrary) -> AssetLibrary:
self._libraries[library.id] = library
return library
def delete(self, library_id: str) -> bool:
if library_id in self._libraries:
del self._libraries[library_id]
return True
return False
def increment_asset_count(self, library_id: str, size_delta: int) -> None:
library = self._libraries.get(library_id)
if library:
library.asset_count += 1
library.total_size += size_delta
def decrement_asset_count(self, library_id: str, size_delta: int) -> None:
library = self._libraries.get(library_id)
if library:
library.asset_count = max(0, library.asset_count - 1)
library.total_size = max(0, library.total_size - size_delta)