Drop 10 dead parser-compat columns (srccallsign, dstcallsign,
origpacket, body, header, alive, posambiguity, symboltable,
symbolcode, messaging) and move 14 display-only columns into a
single `data` JSONB column (PHG, telemetry, radiorange,
information_field, format, posresolution, position_ambiguity,
luminosity, rain_midnight).
Reduces row width from ~70 to ~48 columns. Table is ephemeral
so migration uses DROP/recreate. Also fixes snow_24h -> snow bug
in weather check query and adds null byte stripping for JSONB
string sanitization.
Resolves the final 5 Credo cyclomatic complexity issues by:
1. packet.ex: Create get_field_value/2 helper function
- Replaces all `data[:field] || data["field"]` patterns
- Reduces complexity in put_equipment_fields (11 -> 9)
- Reduces complexity in put_phg_fields (12 -> 9)
- Reduces complexity in put_standard_parser_fields (11 -> 9)
2. query_builder.ex: Use SQL fragment for weather_only query
- Replaces multiple Elixir `or` operators with single SQL fragment
- Reduces complexity from 10 to within limits
3. packet_utils.ex: Use SQL fragment for weather check query
- Replaces multiple Elixir `or` operators with single SQL fragment
- Reduces complexity from 11 to within limits
All 71 Credo issues now resolved:
- 14/14 warnings ✓
- 14/14 design suggestions ✓
- 40/40 refactoring issues ✓
- 3/3 code readability issues ✓
100% Credo compliance achieved!
Extract helper functions to reduce cyclomatic complexity:
- telemetry/database_metrics.ex: Extract emit_packets_table_telemetry/7
Moves multiple || 0 operators into separate function
Reduces complexity from 10 to within limits
- packet_utils.ex: Extract build_weather_check_query/1
Moves Ecto query building with multiple or conditions
Reduces complexity from 11 to within limits
- packet.ex: Extract merge_extracted_data/3
Moves telemetry and parser data merging logic
Reduces complexity from 11 to within limits
Fixes 3 Credo cyclomatic complexity issues (7 remaining).
Remove Cachex caching from the has_weather_packets function to ensure
real-time data display. The function now queries the database directly
for weather packet information.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>