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:
@@ -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;
|
return rules;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,16 +99,27 @@ export async function calculateAwardProgress(userId, award) {
|
|||||||
// Normalize rules to handle different formats
|
// Normalize rules to handle different formats
|
||||||
rules = normalizeAwardRules(rules);
|
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
|
// Get all QSOs for user
|
||||||
const allQSOs = await db
|
const allQSOs = await db
|
||||||
.select()
|
.select()
|
||||||
.from(qsos)
|
.from(qsos)
|
||||||
.where(eq(qsos.userId, userId));
|
.where(eq(qsos.userId, userId));
|
||||||
|
|
||||||
|
logger.debug('Total QSOs for user', { count: allQSOs.length });
|
||||||
|
|
||||||
// Apply filters if defined
|
// Apply filters if defined
|
||||||
let filteredQSOs = allQSOs;
|
let filteredQSOs = allQSOs;
|
||||||
if (rules.filters) {
|
if (rules.filters) {
|
||||||
filteredQSOs = applyFilters(allQSOs, rules.filters);
|
filteredQSOs = applyFilters(allQSOs, rules.filters);
|
||||||
|
logger.debug('QSOs after filters', { count: filteredQSOs.length });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate worked and confirmed entities
|
// Calculate worked and confirmed entities
|
||||||
|
|||||||
Reference in New Issue
Block a user