docs: document mode groups feature in CLAUDE.md and README.md

Add documentation for the new configurable mode groups feature:
- CLAUDE.md: Add modeGroups to Award Rule Options section
- CLAUDE.md: Update Award Detail View section with mode group info
- CLAUDE.md: Add to Recent Development Work (January 2026)
- README.md: Add GET /api/awards/:awardId endpoint
- README.md: Add new Mode Groups section in Features in Detail

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-01-23 07:19:49 +01:00
parent cd361115fe
commit 85d171adc8
2 changed files with 53 additions and 1 deletions

View File

@@ -362,6 +362,23 @@ To add a new award:
- If `true`, only QSOs with `satName` field set are counted - If `true`, only QSOs with `satName` field set are counted
- Used for DXCC SAT award - Used for DXCC SAT award
**modeGroups**: Define mode groups for filtering in award detail view
```json
{
"modeGroups": {
"Digi-Modes": ["FT8", "FT4", "MFSK", "PSK31", "RTTY", "JT65", "JT9"],
"Classic Digi-Modes": ["PSK31", "RTTY", "JT65", "JT9"],
"Mixed-Mode w/o WSJT-Modes": ["PSK31", "RTTY", "AM", "SSB", "FM", "CW"],
"Phone-Modes": ["AM", "SSB", "FM"]
}
}
```
- Optional field at award definition level (not in `rules`)
- Key is the display name shown in the mode filter dropdown
- Value is an array of mode strings to include in the group
- Used to create convenient mode filters that combine multiple modes
- Awards without `modeGroups` work as before (backward compatible)
**filters**: Additional filtering options **filters**: Additional filtering options
- `eq`: equals - `eq`: equals
- `ne`: not equals - `ne`: not equals
@@ -443,7 +460,10 @@ The QSO page (`src/frontend/src/routes/qsos/+page.svelte`) includes advanced fil
**Key Features**: **Key Features**:
- **Summary Cards**: Show total, confirmed, worked, needed counts for unique entities - **Summary Cards**: Show total, confirmed, worked, needed counts for unique entities
- **Mode Filter**: Filter by specific mode or view "Mixed Mode" (aggregates all modes by band) - **Mode Filter**: Filter by specific mode, mode group, or view "Mixed Mode" (aggregates all modes by band)
- Awards can define `modeGroups` to create convenient multi-mode filters
- Example groups: "Digi-Modes", "Classic Digi-Modes", "Phone-Modes", "Mixed-Mode w/o WSJT-Modes"
- Visual separator (`─────`) appears between mode groups and individual modes
- **Table Columns**: Show bands (or band/mode combinations) as columns - **Table Columns**: Show bands (or band/mode combinations) as columns
- **QSO Counts**: Each cell shows count of confirmed QSOs for that (entity, band, mode) slot - **QSO Counts**: Each cell shows count of confirmed QSOs for that (entity, band, mode) slot
- **Drill-Down**: Click a count to open modal showing all QSOs for that slot - **Drill-Down**: Click a count to open modal showing all QSOs for that slot
@@ -456,6 +476,8 @@ The QSO page (`src/frontend/src/routes/qsos/+page.svelte`) includes advanced fil
**Column Sums**: Show unique entity count per column (not QSO counts) **Column Sums**: Show unique entity count per column (not QSO counts)
**Backend Changes** (`src/backend/services/awards.service.js`): **Backend Changes** (`src/backend/services/awards.service.js`):
- `getAllAwards()`: Returns award definitions including `modeGroups`
- `getAwardById(awardId)`: Returns single award definition with `modeGroups`
- `calculateDOKAwardProgress()`: Groups by (DOK, band, mode) slots, collects QSOs in `qsos` array - `calculateDOKAwardProgress()`: Groups by (DOK, band, mode) slots, collects QSOs in `qsos` array
- `calculatePointsAwardProgress()`: Handles all count modes with `qsos` array - `calculatePointsAwardProgress()`: Handles all count modes with `qsos` array
- `getAwardEntityBreakdown()`: Groups by (entity, band, mode) slots - `getAwardEntityBreakdown()`: Groups by (entity, band, mode) slots
@@ -511,6 +533,10 @@ const params = new URLSearchParams({
- DXCC restricted to HF bands (160m-10m) only - DXCC restricted to HF bands (160m-10m) only
- Added DXCC SAT award for satellite-only QSOs - Added DXCC SAT award for satellite-only QSOs
- Removed redundant award variants (DXCC CW, DLD variants) - Removed redundant award variants (DXCC CW, DLD variants)
- Added `modeGroups` for configurable multi-mode filters in award detail view
- Per-award configuration of mode groups (Digi-Modes, Phone-Modes, etc.)
- Visual separator in mode filter dropdown between groups and individual modes
- DXCC and DLD awards include: Digi-Modes, Classic Digi-Modes, Mixed-Mode w/o WSJT-Modes, Phone-Modes
**Award Detail View Improvements**: **Award Detail View Improvements**:
- Summary shows unique entity progress instead of QSO counts - Summary shows unique entity progress instead of QSO counts
@@ -518,6 +544,11 @@ const params = new URLSearchParams({
- Satellite QSOs grouped under "SAT" column - Satellite QSOs grouped under "SAT" column
- Bands sorted by wavelength instead of alphabetically - Bands sorted by wavelength instead of alphabetically
- Mode removed from table headers (visible in filter dropdown) - Mode removed from table headers (visible in filter dropdown)
- Mode groups allow filtering multiple modes together (e.g., all digital modes)
**Backend API Additions**:
- Added `GET /api/awards/:awardId` endpoint for fetching single award definition
- `getAllAwards()` now includes `modeGroups` field
**QSO Management**: **QSO Management**:
- Fixed DELETE /api/qsos/all to handle foreign key constraints - Fixed DELETE /api/qsos/all to handle foreign key constraints

View File

@@ -258,6 +258,7 @@ The application will be available at:
### Awards ### Awards
- `GET /api/awards` - Get all available awards - `GET /api/awards` - Get all available awards
- `GET /api/awards/:awardId` - Get single award definition (includes mode groups)
- `GET /api/awards/batch/progress` - Get progress for all awards (optimized, single request) - `GET /api/awards/batch/progress` - Get progress for all awards (optimized, single request)
- `GET /api/awards/:awardId/progress` - Get award progress for a specific award - `GET /api/awards/:awardId/progress` - Get award progress for a specific award
- `GET /api/awards/:awardId/entities` - Get entity breakdown - `GET /api/awards/:awardId/entities` - Get entity breakdown
@@ -800,6 +801,26 @@ bun run db:studio
## Features in Detail ## Features in Detail
### Mode Groups (Award Detail View)
The award detail view includes configurable mode groups for filtering multiple modes together:
**Available Mode Groups** (varies by award):
- **Mixed Mode**: All modes aggregated by band (default view)
- **Digi-Modes**: FT8, FT4, MFSK, PSK31, RTTY, JT65, JT9
- **Classic Digi-Modes**: PSK31, RTTY, JT65, JT9 (excludes FT8, FT4, MFSK)
- **Mixed-Mode w/o WSJT-Modes**: PSK31, RTTY, AM, SSB, FM, CW (excludes WSJT modes)
- **Phone-Modes**: AM, SSB, FM
- **Individual Modes**: CW, SSB, FT8, etc.
The mode filter dropdown displays:
1. Mixed Mode (default)
2. Mode groups (configurable per award)
3. Visual separator (`─────`)
4. Individual modes
Awards can define custom `modeGroups` in their JSON definition to add additional mode groupings.
### Background Job Queue ### Background Job Queue
The application uses an in-memory job queue system for async operations: The application uses an in-memory job queue system for async operations: