from __future__ import annotations from dataclasses import dataclass from packages.domain import Project from packages.ports import ProjectRepository @dataclass(slots=True) class CreateProjectCommand: workspace_id: str name: str description: str = "" class ListProjectsUseCase: def __init__(self, project_repository: ProjectRepository): self.project_repository = project_repository def execute(self, workspace_id: str) -> list[Project]: if not workspace_id.strip(): raise ValueError("workspace_id 不能为空") return self.project_repository.list_by_workspace(workspace_id.strip()) class CreateProjectUseCase: def __init__(self, project_repository: ProjectRepository): self.project_repository = project_repository def execute(self, command: CreateProjectCommand) -> Project: project = Project.create( workspace_id=command.workspace_id, name=command.name, description=command.description, ) return self.project_repository.create(project)