3D Map Explorer's fleet manager is the operator's airworthiness ledger: a drone registry, flight-hour aggregation, maintenance-due tracking (by calendar and hours), and per-battery cycle logging. Log a flight once and the aircraft's totals, maintenance thresholds, and battery cycles all roll forward — the "is this aircraft legal/safe to fly" answer, in one place.
Each Aircraft carries aggregate usage — total flight hours, total flights, total distance, battery cycles, last-maintenance timestamp — and FleetService.LogFlightAsync keeps them in sync as flights are logged. Maintenance is driven by both a calendar threshold (LastMaintenanceUtc) and a flight-hours threshold recorded at each service.
FlightHoursAtService driving the next-due hours threshold.POST /api/fleet/logflight updates hours, distance, flights, and cycles in one transaction.// log a flight → totals roll forward { "aircraftId": "MAVIC-3-007", "flightHours": 0.4, "distanceKm": 6.2, "batterySerial": "B-1042", "cycles": 1 } → aircraft + battery updated in sync GET /api/fleet/overview { "aircraft": 12, "maintenanceDue": 2 }
Maintenance-due is computed two ways so an aircraft can't slip past either threshold: a calendar gate from LastMaintenanceUtc, and a flight-hours gate from the hours recorded at the last service. The overview endpoint surfaces the counts an operator actually checks before the day's flights.
Serial, status, totals — the master record per airframe.
Categorized entries; hours-at-service drives the next-due computation.
Per aircraft + battery serial; the aging metric that grounds a pack.
Days-since-last-service against the maintenance calendar threshold.
Flight-hours-since-service against the per-service hours threshold.
One call — fleet size, maintenance-due count — for the daily go/no-go board.
| Capability | Endpoint | Notes |
|---|---|---|
| Capability discovery | GET /api/fleet/capabilities | Registry + maintenance + battery |
| Overview | GET /api/fleet/overview | Fleet size + maintenance-due counts |
| Aircraft CRUD | GET · POST · PUT · DELETE /api/fleet/aircraft[/{id}] | Registry |
| Aircraft flights | GET /api/fleet/aircraft/{id}/flights | Per-aircraft flight history |
| Maintenance CRUD | GET · POST · PUT · DELETE /api/fleet/maintenance[/{id}] | Service log |
| Battery CRUD | GET · POST · DELETE /api/fleet/battery[/{aircraftId}/{batterySerial}] | Cycle tracking |
| Log flight (rollup) | POST /api/fleet/logflight | Hours + distance + cycles in one call |
Registry + rollup logic reflect FleetService.LogFlightAsync and FleetModels.cs on commit 01591458d (feat/fleet-manager). The store is local to the workstation — for multi-station fleet sync, point the store at a shared GeoPackage on the LAN.
Registry, flight-hour aggregation, maintenance-due by calendar and hours, and battery-cycle logging — all rolling forward from one log-flight call.