Files
xiaoxia-saas/packages/adapters/in_memory/asset_library_repository.py
T
灵应 3889cd0f1a
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 25h29m22s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 25h29m22s
feat: 新增 DELETE /asset-libraries/{library_id} 接口
- 删除素材库同时清理库内素材(无 FK 级联,手动处理)
- 加权限校验:检查用户项目访问权限
- InMemoryAssetLibraryRepository 补充 find_by_id 方法
- 5 个单元测试覆盖:正常删除、含素材删除、404、403、项目不存在
2026-07-08 11:23:22 +08:00

49 lines
1.8 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_id(self, library_id: str) -> AssetLibrary | None:
return self.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)