70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
import uuid
|
|
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from cpv3.modules.projects.models import Project
|
|
from cpv3.modules.projects.repository import ProjectRepository
|
|
from cpv3.modules.projects.schemas import ProjectCreate, ProjectUpdate
|
|
from cpv3.modules.users.models import User
|
|
|
|
|
|
class ProjectService:
|
|
"""Service for project business logic and orchestration."""
|
|
|
|
def __init__(self, session: AsyncSession) -> None:
|
|
self._repo = ProjectRepository(session)
|
|
|
|
async def list_projects(
|
|
self,
|
|
*,
|
|
requester: User,
|
|
search: str | None = None,
|
|
status: str | None = None,
|
|
) -> list[Project]:
|
|
return await self._repo.list_all(
|
|
requester=requester, search=search, status=status,
|
|
)
|
|
|
|
async def get_project(self, project_id: uuid.UUID) -> Project | None:
|
|
return await self._repo.get_by_id(project_id)
|
|
|
|
async def create_project(self, *, requester: User, data: ProjectCreate) -> Project:
|
|
folder = f"/{requester.username}/{data.name}"
|
|
return await self._repo.create(
|
|
requester=requester, data=data, folder=folder, status="DRAFT",
|
|
)
|
|
|
|
async def update_project(self, project: Project, data: ProjectUpdate) -> Project:
|
|
return await self._repo.update(project, data)
|
|
|
|
async def deactivate_project(self, project: Project) -> None:
|
|
await self._repo.deactivate(project)
|
|
|
|
|
|
# Legacy function exports for backward compatibility
|
|
async def list_projects(session: AsyncSession, *, requester: User) -> list[Project]:
|
|
service = ProjectService(session)
|
|
return await service.list_projects(requester=requester)
|
|
|
|
|
|
async def get_project(session: AsyncSession, project_id: uuid.UUID) -> Project | None:
|
|
service = ProjectService(session)
|
|
return await service.get_project(project_id)
|
|
|
|
|
|
async def create_project(session: AsyncSession, *, requester: User, data: ProjectCreate) -> Project:
|
|
service = ProjectService(session)
|
|
return await service.create_project(requester=requester, data=data)
|
|
|
|
|
|
async def update_project(session: AsyncSession, project: Project, data: ProjectUpdate) -> Project:
|
|
service = ProjectService(session)
|
|
return await service.update_project(project, data)
|
|
|
|
|
|
async def deactivate_project(session: AsyncSession, project: Project) -> None:
|
|
service = ProjectService(session)
|
|
await service.deactivate_project(project)
|