Files
Fulfillment-Backend/routers/project.py

101 lines
2.7 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, user_deals_viewer
from services.project import ProjectService
project_router = APIRouter(
prefix="/project",
tags=["project"],
)
@project_router.get(
"/",
response_model=GetProjectsResponse,
operation_id="get_projects",
dependencies=[Depends(user_deals_viewer)],
)
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)