Files
main_backend/cpv3/modules/projects/service.py
T
2026-04-27 23:19:04 +03:00

75 lines
2.6 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._session = session
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}"
project = await self._repo.create(
requester=requester, data=data, folder=folder, status="DRAFT",
)
from cpv3.modules.project_workspaces.service import ProjectWorkspaceService
await ProjectWorkspaceService(self._session).create_for_project(project)
return project
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)