43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
import uuid
|
|
from datetime import datetime, timezone
|
|
from pathlib import Path
|
|
|
|
from app.modules.project.domain.entities import Project
|
|
from app.modules.project.domain.repositories import ProjectRepository
|
|
from app.shared.kernel.exceptions import NotFoundError, ValidationError
|
|
|
|
|
|
class ProjectService:
|
|
def __init__(self, repository: ProjectRepository) -> None:
|
|
self._repo = repository
|
|
|
|
def list_projects(self) -> list[Project]:
|
|
return self._repo.list_all()
|
|
|
|
def create_project(
|
|
self, name: str, design_dir: str, code_dir: str | None = None,
|
|
) -> Project:
|
|
if not Path(design_dir).is_dir():
|
|
raise ValidationError(f"Design directory does not exist: {design_dir}")
|
|
project = Project(
|
|
id=str(uuid.uuid4()),
|
|
name=name,
|
|
design_dir=design_dir,
|
|
code_dir=code_dir,
|
|
created_at=datetime.now(timezone.utc),
|
|
)
|
|
self._repo.save(project)
|
|
return project
|
|
|
|
def get_project(self, project_id: str) -> Project:
|
|
project = self._repo.get_by_id(project_id)
|
|
if project is None:
|
|
raise NotFoundError("Project", project_id)
|
|
return project
|
|
|
|
def delete_project(self, project_id: str) -> None:
|
|
project = self._repo.get_by_id(project_id)
|
|
if project is None:
|
|
raise NotFoundError("Project", project_id)
|
|
self._repo.delete(project_id)
|