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

114 lines
3.6 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(
'/',
response_model=list[ProjectMemberEntity],
summary='Get all project members',
description='Returns all project members',
)
async def get_all_project_members(
db: AsyncSession = Depends(get_db),
):
project_members_service = ProjectMembersService(db)
return await project_members_service.get_all_project_members()
@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."}
@router.delete(
'/member/{member_id}/',
summary='Delete a single project member by ID',
description='Deletes a specific project member by their unique ID',
)
async def delete_single_project_member(
member_id: int,
db: AsyncSession = Depends(get_db),
user=Depends(require_admin),
):
service = ProjectMembersService(db)
deleted_member = await service.delete_project_member_by_id(member_id)
return deleted_member