94 lines
2.9 KiB
Python
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,
|
|
)
|
|
)
|