checkUnmetPrerequisites method

Future<List<UnmetPrerequisite>> checkUnmetPrerequisites(
  1. String topicId,
  2. Map<String, String> masteryMap,
  3. Map<String, String> topicNames
)

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;
}