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:
33
CLAUDE.md
33
CLAUDE.md
@@ -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
|
||||||
|
|||||||
21
README.md
21
README.md
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user