diff --git a/src/backend/services/awards.service.js b/src/backend/services/awards.service.js index bf4d675..f0630c8 100644 --- a/src/backend/services/awards.service.js +++ b/src/backend/services/awards.service.js @@ -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