100 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import Annotated
 | 
						|
 | 
						|
from fastapi import APIRouter, Depends
 | 
						|
from sqlalchemy.ext.asyncio import AsyncSession
 | 
						|
 | 
						|
from backend.session import get_session
 | 
						|
from schemas.project import *
 | 
						|
from services.auth import guest_user, authorized_user
 | 
						|
from services.project import ProjectService
 | 
						|
 | 
						|
project_router = APIRouter(
 | 
						|
    prefix="/project",
 | 
						|
    tags=["project"],
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
@project_router.get(
 | 
						|
    "/",
 | 
						|
    response_model=GetProjectsResponse,
 | 
						|
    operation_id="get_projects",
 | 
						|
)
 | 
						|
async def get_projects(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
):
 | 
						|
    return await ProjectService(session).get_projects()
 | 
						|
 | 
						|
 | 
						|
@project_router.post(
 | 
						|
    '/',
 | 
						|
    response_model=CreateProjectResponse,
 | 
						|
    operation_id="create_project",
 | 
						|
    dependencies=[Depends(authorized_user)]
 | 
						|
)
 | 
						|
async def create_project(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        request: CreateProjectRequest,
 | 
						|
):
 | 
						|
    return await ProjectService(session).create_project(request)
 | 
						|
 | 
						|
 | 
						|
@project_router.patch(
 | 
						|
    '/',
 | 
						|
    response_model=UpdateProjectResponse,
 | 
						|
    operation_id="update_project",
 | 
						|
    dependencies=[Depends(authorized_user)]
 | 
						|
)
 | 
						|
async def update_project(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        request: UpdateProjectRequest,
 | 
						|
):
 | 
						|
    return await ProjectService(session).update_project(request)
 | 
						|
 | 
						|
 | 
						|
@project_router.delete(
 | 
						|
    '/{project_id}',
 | 
						|
    response_model=DeleteProjectResponse,
 | 
						|
    operation_id="delete_project",
 | 
						|
    dependencies=[Depends(authorized_user)]
 | 
						|
)
 | 
						|
async def delete_project(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        project_id: int,
 | 
						|
):
 | 
						|
    return await ProjectService(session).delete_project(project_id)
 | 
						|
 | 
						|
 | 
						|
@project_router.get(
 | 
						|
    "/modules",
 | 
						|
    response_model=GetAllModulesResponse,
 | 
						|
    operation_id="get_all_modules",
 | 
						|
)
 | 
						|
async def get_all_modules(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
):
 | 
						|
    return await ProjectService(session).get_all_modules()
 | 
						|
 | 
						|
 | 
						|
@project_router.post(
 | 
						|
    "/modules",
 | 
						|
    response_model=UpdateModulesResponse,
 | 
						|
    operation_id="update_project_modules",
 | 
						|
)
 | 
						|
async def update_project_modules(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        request: UpdateModulesRequest,
 | 
						|
):
 | 
						|
    return await ProjectService(session).update_project_modules(request)
 | 
						|
 | 
						|
 | 
						|
@project_router.post(
 | 
						|
    "/attributes",
 | 
						|
    response_model=UpdateAttributesResponse,
 | 
						|
    operation_id="update_project_attributes",
 | 
						|
)
 | 
						|
async def update_project_attributes(
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
						|
        request: UpdateAttributesRequest,
 | 
						|
):
 | 
						|
    return await ProjectService(session).update_project_attributes(request)
 |