first commit
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
|
||||
from app.models.schemas import CoverageRequest, CoverageResponse
|
||||
from app.services.coverage import CoverageService
|
||||
|
||||
router = APIRouter(prefix="/v1", tags=["coverage"])
|
||||
|
||||
|
||||
def get_coverage_service() -> CoverageService:
|
||||
from app.main import coverage_service
|
||||
|
||||
return coverage_service
|
||||
|
||||
|
||||
@router.post("/coverage", response_model=CoverageResponse)
|
||||
async def calculate_coverage(
|
||||
request: CoverageRequest,
|
||||
service: CoverageService = Depends(get_coverage_service),
|
||||
) -> CoverageResponse:
|
||||
try:
|
||||
geojson = await service.calculate_coverage(request)
|
||||
except ValueError as exc:
|
||||
raise HTTPException(status_code=400, detail=str(exc)) from exc
|
||||
|
||||
return CoverageResponse(origin=request.origin, coverage_geojson=geojson)
|
||||
@@ -0,0 +1,36 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
|
||||
from app.models.schemas import ElevationProfilePoint, ElevationProfileResponse
|
||||
from app.services.link_calculator import LinkCalculator
|
||||
|
||||
router = APIRouter(prefix="/v1", tags=["elevation"])
|
||||
|
||||
|
||||
def get_link_calculator() -> LinkCalculator:
|
||||
from app.main import link_calculator
|
||||
|
||||
return link_calculator
|
||||
|
||||
|
||||
@router.get("/elevation-profile", response_model=ElevationProfileResponse)
|
||||
async def elevation_profile(
|
||||
from_lat: float = Query(..., ge=-90, le=90),
|
||||
from_lng: float = Query(..., ge=-180, le=180),
|
||||
to_lat: float = Query(..., ge=-90, le=90),
|
||||
to_lng: float = Query(..., ge=-180, le=180),
|
||||
step_m: float = Query(default=30.0, gt=0),
|
||||
calculator: LinkCalculator = Depends(get_link_calculator),
|
||||
) -> ElevationProfileResponse:
|
||||
distance_m, profile = await calculator.elevation_profile(
|
||||
from_lat,
|
||||
from_lng,
|
||||
to_lat,
|
||||
to_lng,
|
||||
step_m,
|
||||
)
|
||||
return ElevationProfileResponse(
|
||||
distance_m=distance_m,
|
||||
path_profile=[ElevationProfilePoint(**point) for point in profile],
|
||||
)
|
||||
@@ -0,0 +1,30 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from app.models.schemas import LinkRequest, LinkResponse
|
||||
from app.services.link_calculator import LinkCalculator
|
||||
|
||||
router = APIRouter(prefix="/v1", tags=["link"])
|
||||
|
||||
|
||||
def get_link_calculator() -> LinkCalculator:
|
||||
from app.main import link_calculator
|
||||
|
||||
return link_calculator
|
||||
|
||||
|
||||
@router.post("/link", response_model=LinkResponse)
|
||||
async def calculate_link(
|
||||
request: LinkRequest,
|
||||
calculator: LinkCalculator = Depends(get_link_calculator),
|
||||
) -> LinkResponse:
|
||||
return await calculator.calculate_link(
|
||||
from_pt=request.from_,
|
||||
to_pt=request.to,
|
||||
frequency_mhz=request.frequency_mhz,
|
||||
fresnel_clearance=request.fresnel_clearance,
|
||||
tx_power_dbm=request.tx_power_dbm,
|
||||
rx_sensitivity_dbm=request.rx_sensitivity_dbm,
|
||||
sample_step_m=request.sample_step_m,
|
||||
)
|
||||
Reference in New Issue
Block a user