mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-04-22 11:16:37 +00:00
initial structure implemented
docs -> _docs
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
from .routes import router
|
||||
from .dependencies import get_flight_api, get_sse_streamer
|
||||
|
||||
__all__ = ["router", "get_flight_api", "get_sse_streamer"]
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
from components.flight_api import FlightAPI, FlightAPIBase
|
||||
from components.sse_event_streamer import SSEEventStreamer, SSEEventStreamerBase
|
||||
|
||||
_flight_api: FlightAPIBase | None = None
|
||||
_sse_streamer: SSEEventStreamerBase | None = None
|
||||
|
||||
|
||||
def get_flight_api() -> FlightAPIBase:
|
||||
global _flight_api
|
||||
if _flight_api is None:
|
||||
_flight_api = FlightAPI()
|
||||
return _flight_api
|
||||
|
||||
|
||||
def get_sse_streamer() -> SSEEventStreamerBase:
|
||||
global _sse_streamer
|
||||
if _sse_streamer is None:
|
||||
_sse_streamer = SSEEventStreamer()
|
||||
return _sse_streamer
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
from fastapi import APIRouter
|
||||
|
||||
from .flights import router as flights_router
|
||||
from .images import router as images_router
|
||||
from .stream import router as stream_router
|
||||
|
||||
router = APIRouter()
|
||||
router.include_router(flights_router, prefix="/flights", tags=["flights"])
|
||||
router.include_router(images_router, prefix="/flights", tags=["images"])
|
||||
router.include_router(stream_router, prefix="/stream", tags=["stream"])
|
||||
|
||||
__all__ = ["router"]
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from models.api import (
|
||||
FlightCreateRequest,
|
||||
FlightResponse,
|
||||
FlightDetailResponse,
|
||||
FlightStatusResponse,
|
||||
DeleteResponse,
|
||||
UpdateResponse,
|
||||
UserFixRequest,
|
||||
UserFixResponse,
|
||||
ObjectGPSResponse,
|
||||
)
|
||||
from models.core import GPSPoint
|
||||
from api.dependencies import get_flight_api
|
||||
from components.flight_api import FlightAPIBase
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post("", response_model=FlightResponse)
|
||||
async def create_flight(
|
||||
request: FlightCreateRequest,
|
||||
api: FlightAPIBase = Depends(get_flight_api),
|
||||
) -> FlightResponse:
|
||||
return await api.create_flight(request)
|
||||
|
||||
|
||||
@router.get("/{flight_id}", response_model=FlightDetailResponse)
|
||||
async def get_flight(
|
||||
flight_id: str,
|
||||
api: FlightAPIBase = Depends(get_flight_api),
|
||||
) -> FlightDetailResponse:
|
||||
return await api.get_flight(flight_id)
|
||||
|
||||
|
||||
@router.get("/{flight_id}/status", response_model=FlightStatusResponse)
|
||||
async def get_flight_status(
|
||||
flight_id: str,
|
||||
api: FlightAPIBase = Depends(get_flight_api),
|
||||
) -> FlightStatusResponse:
|
||||
return await api.get_flight_status(flight_id)
|
||||
|
||||
|
||||
@router.delete("/{flight_id}", response_model=DeleteResponse)
|
||||
async def delete_flight(
|
||||
flight_id: str,
|
||||
api: FlightAPIBase = Depends(get_flight_api),
|
||||
) -> DeleteResponse:
|
||||
return await api.delete_flight(flight_id)
|
||||
|
||||
|
||||
@router.put("/{flight_id}/waypoints", response_model=UpdateResponse)
|
||||
async def update_waypoints(
|
||||
flight_id: str,
|
||||
waypoints: list[GPSPoint],
|
||||
api: FlightAPIBase = Depends(get_flight_api),
|
||||
) -> UpdateResponse:
|
||||
return await api.update_waypoints(flight_id, waypoints)
|
||||
|
||||
|
||||
@router.post("/{flight_id}/user-fix", response_model=UserFixResponse)
|
||||
async def submit_user_fix(
|
||||
flight_id: str,
|
||||
request: UserFixRequest,
|
||||
api: FlightAPIBase = Depends(get_flight_api),
|
||||
) -> UserFixResponse:
|
||||
return await api.submit_user_fix(flight_id, request)
|
||||
|
||||
|
||||
@router.get("/{flight_id}/frames/{frame_id}/object-gps", response_model=ObjectGPSResponse)
|
||||
async def get_object_gps(
|
||||
flight_id: str,
|
||||
frame_id: int,
|
||||
pixel_x: float,
|
||||
pixel_y: float,
|
||||
api: FlightAPIBase = Depends(get_flight_api),
|
||||
) -> ObjectGPSResponse:
|
||||
return await api.get_object_gps(flight_id, frame_id, (pixel_x, pixel_y))
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
from typing import Annotated
|
||||
from fastapi import APIRouter, Depends, UploadFile, File, Form
|
||||
|
||||
from models.api import BatchResponse
|
||||
from api.dependencies import get_flight_api
|
||||
from components.flight_api import FlightAPIBase
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post("/{flight_id}/batches", response_model=BatchResponse)
|
||||
async def upload_batch(
|
||||
flight_id: str,
|
||||
files: Annotated[list[UploadFile], File()],
|
||||
start_sequence: Annotated[int, Form()],
|
||||
end_sequence: Annotated[int, Form()],
|
||||
batch_number: Annotated[int, Form()],
|
||||
api: FlightAPIBase = Depends(get_flight_api),
|
||||
) -> BatchResponse:
|
||||
return await api.upload_batch(
|
||||
flight_id,
|
||||
files,
|
||||
start_sequence,
|
||||
end_sequence,
|
||||
batch_number,
|
||||
)
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
from sse_starlette.sse import EventSourceResponse
|
||||
|
||||
from api.dependencies import get_flight_api
|
||||
from components.flight_api import FlightAPIBase
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/{flight_id}")
|
||||
async def stream_events(
|
||||
flight_id: str,
|
||||
api: FlightAPIBase = Depends(get_flight_api),
|
||||
) -> EventSourceResponse:
|
||||
return EventSourceResponse(api.stream_events(flight_id))
|
||||
|
||||
Reference in New Issue
Block a user