checkUnmetPrerequisites method
Check which prerequisites the user hasn't met yet.
masteryMap maps topic IDs to mastery level strings.
A "required" prerequisite needs at least "awareness".
A "recommended" prerequisite needs at least "understanding".
Implementation
Future<List<UnmetPrerequisite>> checkUnmetPrerequisites(
String topicId,
Map<String, String> masteryMap,
Map<String, String> topicNames,
) async {
final prereqs = await getPrerequisites(topicId);
final unmet = <UnmetPrerequisite>[];
for (final p in prereqs) {
final mastery = masteryMap[p.prerequisiteTopicId] ?? 'unstarted';
final masteryIdx = _masteryIndex(mastery);
final requiredIdx = p.strength == 'required'
? _masteryIndex('awareness')
: _masteryIndex('understanding');
if (masteryIdx < requiredIdx) {
unmet.add(
UnmetPrerequisite(
prerequisiteTopicId: p.prerequisiteTopicId,
title: topicNames[p.prerequisiteTopicId] ?? 'Unknown topic',
currentMastery: mastery,
strength: p.strength,
),
);
}
}
return unmet;
}