diff --git a/tasks/flightradar24/ingest/preprocess/main.py b/tasks/flightradar24/ingest/preprocess/main.py index 03ee4a9..9c3f466 100644 --- a/tasks/flightradar24/ingest/preprocess/main.py +++ b/tasks/flightradar24/ingest/preprocess/main.py @@ -203,6 +203,21 @@ def get_or_create_flight(conn, aircraft_id: int, callsign: str | None, observed_ return cur.fetchone()[0] +def update_flight_callsign(conn, aircraft_id: int, callsign: str) -> None: + """Update callsign on active flight if not already set.""" + with conn.cursor() as cur: + cur.execute( + """ + UPDATE fr24.flights + SET callsign = %s + WHERE aircraft_id = %s + AND status = 'active' + AND callsign IS NULL + """, + (callsign, aircraft_id), + ) + + def get_or_create_track(conn, flight_id: int) -> int: with conn.cursor() as cur: cur.execute( @@ -343,6 +358,10 @@ def process_batch(conn, packets: list, aircraft_state: dict) -> int: aircraft_id = upsert_aircraft(conn, icao24, callsign, now) flight_id = get_or_create_flight(conn, aircraft_id, callsign, observed_at) + # update callsign on active flight if MSG1 brought a callsign + if msg_type == "1" and callsign: + update_flight_callsign(conn, aircraft_id, callsign) + # sanity-check: skip obviously invalid coordinates if lat is not None and lon is not None and not (-90 <= lat <= 90 and -180 <= lon <= 180): log.warning("Invalid coords icao24=%s lat=%s lon=%s — skipping", icao24, lat, lon)