Add counter award type support and debug logging

- Handle 'counter' type awards that count unique callsigns
- Add debug logging to track QSO filtering progress
- Normalize counter awards to use entityType: 'callsign'

This fixes RS-44 satellite award to count unique callsigns worked
via RS-44 satellite.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-16 09:00:59 +01:00
parent 111d6d5dd4
commit b3567100c0

View File

@@ -74,6 +74,17 @@ function normalizeAwardRules(rules) {
};
}
// Handle "counter" type awards (like RS-44)
// These count unique callsigns instead of entities
if (rules.type === 'counter') {
return {
type: 'entity',
entityType: rules.countBy === 'qso' ? 'callsign' : 'callsign',
target: rules.target,
filters: rules.filters,
};
}
return rules;
}
@@ -88,16 +99,27 @@ export async function calculateAwardProgress(userId, award) {
// Normalize rules to handle different formats
rules = normalizeAwardRules(rules);
logger.debug('Calculating award progress', {
userId,
awardId: award.id,
awardType: rules.type,
entityType: rules.entityType,
hasFilters: !!rules.filters,
});
// Get all QSOs for user
const allQSOs = await db
.select()
.from(qsos)
.where(eq(qsos.userId, userId));
logger.debug('Total QSOs for user', { count: allQSOs.length });
// Apply filters if defined
let filteredQSOs = allQSOs;
if (rules.filters) {
filteredQSOs = applyFilters(allQSOs, rules.filters);
logger.debug('QSOs after filters', { count: filteredQSOs.length });
}
// Calculate worked and confirmed entities