47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
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 GetProjectUseCase:
|
|
def __init__(self, project_repository: ProjectRepository):
|
|
self.project_repository = project_repository
|
|
|
|
def execute(self, project_id: str) -> Project | None:
|
|
if not project_id.strip():
|
|
raise ValueError("project_id 不能为空")
|
|
return self.project_repository.find_by_id(project_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)
|