71 lines
1.8 KiB
Python
71 lines
1.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 import ProjectEntity
|
|
from app.infrastructure.dependencies import require_admin
|
|
from app.infrastructure.projects_service import ProjectsService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get(
|
|
'/',
|
|
response_model=list[ProjectEntity],
|
|
summary='Get all projects',
|
|
description='Returns all projects',
|
|
)
|
|
async def get_all_projects(
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
projects_service = ProjectsService(db)
|
|
return await projects_service.get_all_projects()
|
|
|
|
|
|
@router.post(
|
|
'/',
|
|
response_model=Optional[ProjectEntity],
|
|
summary='Create a new project',
|
|
description='Creates a new project',
|
|
)
|
|
async def create_project(
|
|
project: ProjectEntity,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(require_admin),
|
|
):
|
|
projects_service = ProjectsService(db)
|
|
return await projects_service.create_project(project)
|
|
|
|
|
|
@router.put(
|
|
'/{project_id}/',
|
|
response_model=Optional[ProjectEntity],
|
|
summary='Update a project',
|
|
description='Updates a project',
|
|
)
|
|
async def update_project(
|
|
project_id: int,
|
|
project: ProjectEntity,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(require_admin),
|
|
):
|
|
projects_service = ProjectsService(db)
|
|
return await projects_service.update_project(project_id, project)
|
|
|
|
|
|
@router.delete(
|
|
'/{project_id}/',
|
|
response_model=Optional[ProjectEntity],
|
|
summary='Delete a project',
|
|
description='Delete a project',
|
|
)
|
|
async def delete_project(
|
|
project_id: int,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(require_admin),
|
|
):
|
|
projects_service = ProjectsService(db)
|
|
return await projects_service.delete_project(project_id)
|