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, ) )