from typing import Optional from fastapi import APIRouter, Depends, Path, Query from common.models.gmodel import PageParams, UserInfo from router.v1.validator.dependencies import IsValidAccessToken, RemoveNoneResponse from services.renegotiation_service import RenegotiationService from .protocol import ( Req_ApproveRenegotiation, Req_RejectRenegotiation, Res_RenegotiationDecision, Res_RenegotiationList, ) router = APIRouter(prefix="/v1/renegotiation", tags=["Renegotiation"], responses={404: {"description": "Not found"}}) @router.get(path="/list", response_model=Res_RenegotiationList, summary="재협상 요청 현황") async def list_requests( service: RenegotiationService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken), status: Optional[int] = Query(None, description="요청 상태(1=심사중 2=승인 3=반려 4=철회). 미지정 시 전체"), pg: PageParams = Depends(), ): return RemoveNoneResponse(await service.list_requests(user_info.company_id, user_info.user_id, user_info.role, status, pg)) @router.post(path="/{session_id}/approve", response_model=Res_RenegotiationDecision, summary="재협상 승인") async def approve( req: Req_ApproveRenegotiation, session_id: str = Path(..., description="요청이 달린 협상 세션 uuid"), service: RenegotiationService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken), ): return RemoveNoneResponse( await service.approve(user_info.company_id, user_info.user_id, user_info.role, session_id, req) ) @router.post(path="/{session_id}/reject", response_model=Res_RenegotiationDecision, summary="재협상 반려") async def reject( req: Req_RejectRenegotiation, session_id: str = Path(..., description="요청이 달린 협상 세션 uuid"), service: RenegotiationService = Depends(), user_info: UserInfo = Depends(IsValidAccessToken), ): return RemoveNoneResponse(await service.reject(user_info.company_id, user_info.user_id, user_info.role, session_id, req))