prop/lib/microwaveprop/radio.ex
Graham McIntire 2e46ceffcc
Some checks failed
Build and Push / Build and Push Docker Image (push) Failing after 4m52s
Optimize contact map rendering performance
- Switch polylines and circle markers to shared L.canvas() renderer,
  eliminating ~58k SVG DOM nodes in favor of 1 GPU-composited canvas
- Add server-side callsign/date filtering to /api/contacts/map endpoint
  to reduce payload size when filters are active
- Add early-exit fast path in applyCallsignFilter when no filter active
- Batch rebuildDots with requestAnimationFrame to avoid redundant work
  during rapid filter changes
2026-08-02 13:21:15 -05:00

54 lines
2.7 KiB
Elixir

defmodule Microwaveprop.Radio do
@moduledoc false
alias Microwaveprop.Radio.Contacts
alias Microwaveprop.Radio.Import
# ── Contacts ──
defdelegate contact_map_payload(filters \\ []), to: Contacts
defdelegate list_contacts_for_user(owner, viewer \\ nil), to: Contacts
defdelegate list_contacts_involving_callsign(callsign, viewer \\ nil), to: Contacts
defdelegate list_contacts(opts \\ []), to: Contacts
defdelegate group_reciprocals(contacts), to: Contacts
defdelegate contacts_needing_enrichment(field, limit \\ 500, extra_filter \\ nil), to: Contacts
defdelegate unprocessed_contacts(limit \\ 500), to: Contacts
defdelegate unprocessed_hrrr_contacts(limit \\ 500), to: Contacts
defdelegate unprocessed_terrain_contacts(limit \\ 500), to: Contacts
defdelegate unprocessed_iemre_contacts(limit \\ 500), to: Contacts
defdelegate unprocessed_radar_contacts(limit \\ 500), to: Contacts
defdelegate set_enrichment_status!(ids, field, status), to: Contacts
defdelegate mark_weather_queued!(ids), to: Contacts
defdelegate mark_hrrr_queued!(ids), to: Contacts
defdelegate mark_terrain_queued!(ids), to: Contacts
defdelegate mark_iemre_queued!(ids), to: Contacts
defdelegate contact_path_points(contact), to: Contacts
defdelegate haversine_km(lat1, lon1, lat2, lon2), to: Contacts
defdelegate backfill_distances(contacts), to: Contacts
defdelegate get_contact!(id), to: Contacts
defdelegate can_view?(contact, scope), to: Contacts
defdelegate delete_contact!(contact), to: Contacts
defdelegate toggle_flagged_invalid!(contact, flagger \\ nil), to: Contacts
defdelegate list_flagged_contacts(), to: Contacts
defdelegate change_contact(contact, attrs \\ %{}), to: Contacts
defdelegate ensure_positions!(contact), to: Contacts
defdelegate create_contact(attrs, user_id \\ nil), to: Contacts
defdelegate owner?(contact, user), to: Contacts
# ── Import ──
defdelegate apply_contact_refinement(contact, changes), to: Import
defdelegate create_contact_edit(contact, user, proposed_changes), to: Import
defdelegate normalize_proposed(changes), to: Import
defdelegate diff_against_contact(contact, proposed), to: Import
defdelegate list_pending_edits(), to: Import
defdelegate pending_edits_query(), to: Import
defdelegate list_contact_edits(contact_id), to: Import
defdelegate pending_edit_count(), to: Import
defdelegate pending_edit_for_user(contact_id, user_id), to: Import
defdelegate get_contact_edit(id), to: Import
defdelegate approve_edit(edit, admin, note), to: Import
defdelegate reject_edit(edit, admin, note), to: Import
defdelegate apply_owner_edit(contact, user, proposed_changes), to: Import
defdelegate apply_edit_to_contact(contact, proposed_changes), to: Import
end