feat: convert 52 API endpoints from POST to GET for edge caching (#468)

* feat: convert 52 API endpoints from POST to GET for edge caching

Convert all cacheable sebuf RPC endpoints to HTTP GET with query/path
parameters, enabling CDN edge caching to reduce costs. Flatten nested
request types (TimeRange, PaginationRequest, BoundingBox) into scalar
query params. Add path params for resource lookups (GetFredSeries,
GetHumanitarianSummary, GetCountryStockIndex, GetCountryIntelBrief,
GetAircraftDetails). Rewrite router with hybrid static/dynamic matching
for path param support.

Kept as POST: SummarizeArticle, ClassifyEvent, RecordBaselineSnapshot,
GetAircraftDetailsBatch, RegisterInterest.

Generated with sebuf v0.9.0 (protoc-gen-ts-client, protoc-gen-ts-server).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add rate_limited field to market response protos

The rateLimited field was hand-patched into generated files on main but
never declared in the proto definitions. Regenerating wiped it out,
breaking the build. Now properly defined in both ListEtfFlowsResponse
and ListMarketQuotesResponse protos.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: remove accidentally committed .planning files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Sebastien Melki
2026-02-27 17:44:40 +02:00
committed by GitHub
parent 5f908c0929
commit 6669d373cf
169 changed files with 3806 additions and 1860 deletions

View File

@@ -4,18 +4,66 @@ info:
version: 1.0.0
paths:
/api/military/v1/list-military-flights:
post:
get:
tags:
- MilitaryService
summary: ListMilitaryFlights
description: ListMilitaryFlights retrieves tracked military aircraft from OpenSky and Wingbits.
operationId: ListMilitaryFlights
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ListMilitaryFlightsRequest'
required: true
parameters:
- name: page_size
in: query
description: Maximum items per page (1-100).
required: false
schema:
type: integer
format: int32
- name: cursor
in: query
description: Cursor for next page.
required: false
schema:
type: string
- name: ne_lat
in: query
description: North-east corner latitude of bounding box.
required: false
schema:
type: number
format: double
- name: ne_lon
in: query
description: North-east corner longitude of bounding box.
required: false
schema:
type: number
format: double
- name: sw_lat
in: query
description: South-west corner latitude of bounding box.
required: false
schema:
type: number
format: double
- name: sw_lon
in: query
description: South-west corner longitude of bounding box.
required: false
schema:
type: number
format: double
- name: operator
in: query
description: Optional operator filter.
required: false
schema:
type: string
- name: aircraft_type
in: query
description: Optional aircraft type filter.
required: false
schema:
type: string
responses:
"200":
description: Successful response
@@ -36,18 +84,19 @@ paths:
schema:
$ref: '#/components/schemas/Error'
/api/military/v1/get-theater-posture:
post:
get:
tags:
- MilitaryService
summary: GetTheaterPosture
description: GetTheaterPosture retrieves military posture assessments for geographic theaters.
operationId: GetTheaterPosture
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GetTheaterPostureRequest'
required: true
parameters:
- name: theater
in: query
description: Theater name (e.g., "indo-pacific", "european", "middle-east"). Empty for all theaters.
required: false
schema:
type: string
responses:
"200":
description: Successful response
@@ -67,19 +116,20 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/military/v1/get-aircraft-details:
post:
/api/military/v1/get-aircraft-details/{icao24}:
get:
tags:
- MilitaryService
summary: GetAircraftDetails
description: GetAircraftDetails retrieves Wingbits aircraft enrichment data for a single ICAO24 hex.
operationId: GetAircraftDetails
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GetAircraftDetailsRequest'
required: true
parameters:
- name: icao24
in: path
description: ICAO 24-bit hex address (lowercase).
required: true
schema:
type: string
responses:
"200":
description: Successful response
@@ -132,18 +182,12 @@ paths:
schema:
$ref: '#/components/schemas/Error'
/api/military/v1/get-wingbits-status:
post:
get:
tags:
- MilitaryService
summary: GetWingbitsStatus
description: GetWingbitsStatus checks whether the Wingbits enrichment API is configured.
operationId: GetWingbitsStatus
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GetWingbitsStatusRequest'
required: true
responses:
"200":
description: Successful response
@@ -164,18 +208,19 @@ paths:
schema:
$ref: '#/components/schemas/Error'
/api/military/v1/get-usni-fleet-report:
post:
get:
tags:
- MilitaryService
summary: GetUSNIFleetReport
description: GetUSNIFleetReport retrieves the latest parsed USNI Fleet Tracker report.
operationId: GetUSNIFleetReport
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GetUSNIFleetReportRequest'
required: true
parameters:
- name: force_refresh
in: query
description: When true, bypass cache and fetch fresh data from USNI.
required: false
schema:
type: boolean
responses:
"200":
description: Successful response
@@ -231,10 +276,29 @@ components:
ListMilitaryFlightsRequest:
type: object
properties:
pagination:
$ref: '#/components/schemas/PaginationRequest'
boundingBox:
$ref: '#/components/schemas/BoundingBox'
pageSize:
type: integer
format: int32
description: Maximum items per page (1-100).
cursor:
type: string
description: Cursor for next page.
neLat:
type: number
format: double
description: North-east corner latitude of bounding box.
neLon:
type: number
format: double
description: North-east corner longitude of bounding box.
swLat:
type: number
format: double
description: South-west corner latitude of bounding box.
swLon:
type: number
format: double
description: South-west corner longitude of bounding box.
operator:
type: string
enum:
@@ -272,45 +336,6 @@ components:
- MILITARY_AIRCRAFT_TYPE_UNKNOWN
description: MilitaryAircraftType represents the classification of a military aircraft.
description: ListMilitaryFlightsRequest specifies filters for retrieving military flight data.
PaginationRequest:
type: object
properties:
pageSize:
type: integer
maximum: 100
minimum: 1
format: int32
description: Maximum number of items to return per page (1 to 100).
cursor:
type: string
description: Opaque cursor for fetching the next page. Empty string for the first page.
description: PaginationRequest specifies cursor-based pagination parameters for list endpoints.
BoundingBox:
type: object
properties:
northEast:
$ref: '#/components/schemas/GeoCoordinates'
southWest:
$ref: '#/components/schemas/GeoCoordinates'
description: |-
BoundingBox represents a rectangular geographic area defined by its corners.
Used for spatial queries to filter results within a geographic region.
GeoCoordinates:
type: object
properties:
latitude:
type: number
maximum: 90
minimum: -90
format: double
description: Latitude in decimal degrees (-90 to 90).
longitude:
type: number
maximum: 180
minimum: -180
format: double
description: Longitude in decimal degrees (-180 to 180).
description: GeoCoordinates represents a geographic location using WGS84 coordinates.
ListMilitaryFlightsResponse:
type: object
properties:
@@ -440,6 +465,22 @@ components:
required:
- id
description: MilitaryFlight represents a tracked military aircraft from OpenSky or Wingbits.
GeoCoordinates:
type: object
properties:
latitude:
type: number
maximum: 90
minimum: -90
format: double
description: Latitude in decimal degrees (-90 to 90).
longitude:
type: number
maximum: 180
minimum: -180
format: double
description: Longitude in decimal degrees (-180 to 180).
description: GeoCoordinates represents a geographic location using WGS84 coordinates.
FlightEnrichment:
type: object
properties: