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)