Files
OpsLog/internal/db/migrations/0003_adif_extra.sql
T
rouggy 7ace2cc602 Initial codebase: Go + Wails amateur radio logbook
Backend (Go 1.25 / Wails v2):
- QSO storage on SQLite (modernc) with embedded migrations (0001..0005)
- Streaming ADIF import (batch insert) + WorkedBefore per callsign and DXCC
- Callsign lookup with QRZ.com + HamQTH providers (primary/failsafe routing)
  and SQLite-backed TTL cache
- DXCC resolver from cty.dat (auto-download, longest-prefix-match)
- Multi-profile operator identities (home/portable/SOTA/contest) — every
  QSO stamps MY_* from the active profile
- CAT control via OmniRig COM on a single OS-locked goroutine, with
  bidirectional sync (freq/mode/band/split/VFOs) and Rig1/Rig2 hot-swap
- Settings store (key/value), CAT debug log at %APPDATA%/HamLog/cat.log

Frontend (React 18 + TypeScript + Tailwind v4 + shadcn-style):
- Single-row entry strip with CAT-aware band/mode/freq, RST, Start/End
  UTC, per-field locks (band/mode/freq/start/end) for backdated QSOs
- Topbar: live freq (MHz.kHz.Hz dotted), live UTC, band/mode/SPLIT badges,
  CAT pill with rig selector and clickable Azimuth pill (rotor TODO)
- Settings tree: Profiles (Log4OM-style manager), Station Information
  (edits the active profile), unified Callsign Lookup with Test buttons,
  Bands/Modes lists, CAT
- Worked-before matrix (band × mode × class) with new-DXCC highlighting
- ADIF import from menu + Maintenance > Refresh cty.dat

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 00:16:45 +02:00

82 lines
4.1 KiB
SQL

-- Expand the QSO table to cover the rest of the common ADIF fields.
-- SQLite ALTER TABLE ADD COLUMN is metadata-only, so this is fast even on
-- large logbooks. Anything not promoted to a column lives in extras_json.
-- --- Times / frequencies / mode ---
ALTER TABLE qso ADD COLUMN qso_date_off TEXT; -- ISO UTC end datetime
ALTER TABLE qso ADD COLUMN freq_rx_hz INTEGER; -- RX frequency for split operation
ALTER TABLE qso ADD COLUMN band_rx TEXT;
ALTER TABLE qso ADD COLUMN submode TEXT; -- USB, LSB, USB-DATA, ...
-- --- Contacted station extras ---
ALTER TABLE qso ADD COLUMN state TEXT; -- US state, JA prefecture, etc.
ALTER TABLE qso ADD COLUMN cnty TEXT;
ALTER TABLE qso ADD COLUMN address TEXT;
ALTER TABLE qso ADD COLUMN email TEXT;
ALTER TABLE qso ADD COLUMN web TEXT;
ALTER TABLE qso ADD COLUMN age INTEGER;
ALTER TABLE qso ADD COLUMN lat REAL;
ALTER TABLE qso ADD COLUMN lon REAL;
ALTER TABLE qso ADD COLUMN gridsquare_ext TEXT; -- 8/10-char extension
ALTER TABLE qso ADD COLUMN vucc_grids TEXT;
ALTER TABLE qso ADD COLUMN rig TEXT; -- contacted station's rig
ALTER TABLE qso ADD COLUMN ant TEXT; -- contacted station's antenna
-- --- QSL bureau / direct / LoTW / eQSL / Clublog / HRDLog ---
ALTER TABLE qso ADD COLUMN qsl_via TEXT;
ALTER TABLE qso ADD COLUMN qsl_msg TEXT;
ALTER TABLE qso ADD COLUMN qslmsg_rcvd TEXT;
ALTER TABLE qso ADD COLUMN qsl_sent_date TEXT;
ALTER TABLE qso ADD COLUMN qsl_rcvd_date TEXT;
ALTER TABLE qso ADD COLUMN lotw_sent_date TEXT;
ALTER TABLE qso ADD COLUMN lotw_rcvd_date TEXT;
ALTER TABLE qso ADD COLUMN eqsl_sent_date TEXT;
ALTER TABLE qso ADD COLUMN eqsl_rcvd_date TEXT;
ALTER TABLE qso ADD COLUMN clublog_qso_upload_date TEXT;
ALTER TABLE qso ADD COLUMN clublog_qso_upload_status TEXT;
ALTER TABLE qso ADD COLUMN hrdlog_qso_upload_date TEXT;
ALTER TABLE qso ADD COLUMN hrdlog_qso_upload_status TEXT;
-- --- Contest ---
ALTER TABLE qso ADD COLUMN contest_id TEXT;
ALTER TABLE qso ADD COLUMN srx INTEGER;
ALTER TABLE qso ADD COLUMN stx INTEGER;
ALTER TABLE qso ADD COLUMN srx_string TEXT;
ALTER TABLE qso ADD COLUMN stx_string TEXT;
ALTER TABLE qso ADD COLUMN check_field TEXT; -- ADIF CHECK (reserved word in SQL)
ALTER TABLE qso ADD COLUMN precedence TEXT;
ALTER TABLE qso ADD COLUMN arrl_sect TEXT;
-- --- Satellite / propagation ---
ALTER TABLE qso ADD COLUMN prop_mode TEXT;
ALTER TABLE qso ADD COLUMN sat_name TEXT;
ALTER TABLE qso ADD COLUMN sat_mode TEXT;
ALTER TABLE qso ADD COLUMN ant_az REAL;
ALTER TABLE qso ADD COLUMN ant_el REAL;
ALTER TABLE qso ADD COLUMN ant_path TEXT;
-- --- My station extras (per-QSO overrides of the active profile) ---
ALTER TABLE qso ADD COLUMN my_state TEXT;
ALTER TABLE qso ADD COLUMN my_cnty TEXT;
ALTER TABLE qso ADD COLUMN my_iota TEXT;
ALTER TABLE qso ADD COLUMN my_dxcc INTEGER;
ALTER TABLE qso ADD COLUMN my_cq_zone INTEGER;
ALTER TABLE qso ADD COLUMN my_itu_zone INTEGER;
ALTER TABLE qso ADD COLUMN my_lat REAL;
ALTER TABLE qso ADD COLUMN my_lon REAL;
ALTER TABLE qso ADD COLUMN my_street TEXT;
ALTER TABLE qso ADD COLUMN my_city TEXT;
ALTER TABLE qso ADD COLUMN my_postal_code TEXT;
ALTER TABLE qso ADD COLUMN my_rig TEXT;
ALTER TABLE qso ADD COLUMN my_antenna TEXT;
ALTER TABLE qso ADD COLUMN my_gridsquare_ext TEXT;
-- --- Catch-all for ADIF fields we don't promote to columns ---
-- JSON object: { "FIELD_NAME": "value", ... } (keys uppercase as in ADIF).
ALTER TABLE qso ADD COLUMN extras_json TEXT;
CREATE INDEX IF NOT EXISTS idx_qso_state ON qso(state);
CREATE INDEX IF NOT EXISTS idx_qso_contest_id ON qso(contest_id);
CREATE INDEX IF NOT EXISTS idx_qso_sat_name ON qso(sat_name);
CREATE INDEX IF NOT EXISTS idx_qso_prop_mode ON qso(prop_mode);