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)