Files
ai-contract-platform/backend/app/api/pilot_requests.py
T

94 lines
2.9 KiB
Python

from typing import Optional
from fastapi import APIRouter, Depends, Header
from sqlalchemy.orm import Session
from app.core.response import success_response
from app.db import get_db_session
from app.schemas.pilot_request import PilotRequestSubmitRequest, PilotRequestUpdateRequest
from app.services.auth_service import AuthService
from app.services.pilot_request_service import PilotRequestService
router = APIRouter(prefix="/pilot-requests", tags=["pilot-requests"])
ROUTE_PERMISSION_SCOPE = "pilot_requests"
ROUTE_PERMISSION_ACTIONS = {
"submit": "pilot_requests:submit",
"list": "pilot_requests:list",
"summary": "pilot_requests:summary",
"update": "pilot_requests:update",
}
def get_pilot_request_service(db: Session = Depends(get_db_session)) -> PilotRequestService:
return PilotRequestService(db)
def require_current_user(
authorization: Optional[str] = Header(default=None),
db: Session = Depends(get_db_session),
):
return AuthService(db).require_current_user(authorization)
@router.post("")
def submit_pilot_request(
payload: PilotRequestSubmitRequest,
pilot_request_service: PilotRequestService = Depends(get_pilot_request_service),
):
return success_response(
pilot_request_service.submit_request(
contact_name=payload.contact_name,
company_name=payload.company_name,
role_title=payload.role_title,
email=payload.email,
phone=payload.phone,
expected_contract_volume=payload.expected_contract_volume,
primary_goal=payload.primary_goal,
deployment_preference=payload.deployment_preference,
scenario_description=payload.scenario_description,
)
)
@router.get("")
def list_pilot_requests(
page: int = 1,
page_size: int = 20,
status_value: Optional[str] = None,
pilot_request_service: PilotRequestService = Depends(get_pilot_request_service),
current_user: dict = Depends(require_current_user),
):
return success_response(
pilot_request_service.list_requests(
current_user,
page=page,
page_size=page_size,
status_value=status_value,
)
)
@router.get("/summary")
def get_pilot_request_summary(
pilot_request_service: PilotRequestService = Depends(get_pilot_request_service),
current_user: dict = Depends(require_current_user),
):
return success_response(pilot_request_service.get_summary(current_user))
@router.put("/{request_id}")
def update_pilot_request(
request_id: str,
payload: PilotRequestUpdateRequest,
pilot_request_service: PilotRequestService = Depends(get_pilot_request_service),
current_user: dict = Depends(require_current_user),
):
return success_response(
pilot_request_service.update_request(
current_user,
request_id,
status_value=payload.status,
admin_notes=payload.admin_notes,
)
)