Files
main_backend/cpv3/modules/projects/service.py
T
2026-02-03 02:15:07 +03:00

59 lines
2.1 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) -> list[Project]:
return await self._repo.list_all(requester=requester)
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:
return await self._repo.create(requester=requester, data=data)
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)