business-card-site/API/app/contollers/project_members_router.py

87 lines
2.8 KiB
Python

from typing import Optional
from fastapi import APIRouter, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from app.database.session import get_db
from app.domain.entities.project_member import ProjectMemberEntity
from app.infrastructure.dependencies import require_admin
from app.infrastructure.project_members_service import ProjectMembersService
router = APIRouter()
@router.get(
'/by-project/{project_id}/',
response_model=list[ProjectMemberEntity],
summary='Get project members by project ID',
description='Returns all project members with the specified project ID'
)
async def get_members_by_project_id(
project_id: int,
db: AsyncSession = Depends(get_db)
):
service = ProjectMembersService(db)
return await service.get_project_members_by_project_id(project_id)
@router.get(
'/by-profile/{profile_id}/',
response_model=list[ProjectMemberEntity],
summary='Get project members by profile ID',
description='Returns all project member records where the profile is involved'
)
async def get_members_by_profile_id(
profile_id: int,
db: AsyncSession = Depends(get_db)
):
service = ProjectMembersService(db)
return await service.get_project_members_by_profile_id(profile_id)
@router.post(
'/{project_id}/',
response_model=Optional[list[ProjectMemberEntity]],
summary='Create a list of project members',
description='Creates a list of project members for the specified project ID'
)
async def create_project_members(
project_id: int,
project_members: list[ProjectMemberEntity],
db: AsyncSession = Depends(get_db),
user=Depends(require_admin),
):
service = ProjectMembersService(db)
return await service.create_list_project_members(project_id, project_members)
@router.put(
'/{project_id}/',
response_model=Optional[list[ProjectMemberEntity]],
summary='Update the list of project members',
description='Deletes all current project members and creates new records'
)
async def update_project_members(
project_id: int,
project_members: list[ProjectMemberEntity],
db: AsyncSession = Depends(get_db),
user=Depends(require_admin),
):
service = ProjectMembersService(db)
return await service.update_list_project_members(project_id, project_members)
@router.delete(
'/{project_id}/',
summary='Delete all project members by project ID',
description='Deletes all project members with the specified project ID',
)
async def delete_project_members(
project_id: int,
db: AsyncSession = Depends(get_db),
user=Depends(require_admin),
):
service = ProjectMembersService(db)
await service.delete_project_members_by_project_id(project_id)
return {"message": "All project members have been successfully deleted."}